Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

5ый семестр / 1. Производственная практика / стащил с работы / 64 урок - TCP сервер и клиент на Ардуино

.pdf
Скачиваний:
3
Добавлен:
18.07.2023
Размер:
5.39 Mб
Скачать

ОБОРУДОВАНИЕ

ТЕХНОЛОГИИ

РАЗРАБОТКИ

(HTTP://MYPRACTIC.RU/)

БЛОГ ТЕХНИЧЕСКОЙ ПОДДЕРЖКИ МОИХ РАЗРАБОТОК

ГЛАВНАЯ (HTTP://MYPRACTIC.RU/)

РУБРИКИ (HTTP://MYPRACTIC.RU/RUBRIKI)

 

 

АРДУИНО (HTTP://MYPRACTIC.RU/UROKI-PROGRAMMIROVANIYA-ARDUINO-NAVIGACIYA-PO-UROKAM)

 

STM32 (HTTP://MYPRACTIC.RU/UROKI-STM32)

О САЙТЕ (HTTP://MYPRACTIC.RU/O-SA JTE)

КОНТАКТЫ (

)

КАРТА САЙТА (HTTP://MYPRACTIC.RU/KARTA-SA JTA)

ФОРУМ (HTTP://MYPRACTIC.RU/GOTO/MPFORUMLINK.PHP)

 

ПОДДЕРЖКА (HTTP://MYPRACTIC.RU/FINANSOVAYA-PODDERZHKA-SA JTA )

 

(http://mypractic.ru

 

 

 

 

 

/goto/ArduinoSys.php)

Урок 64. TCP сервер и клиент на Ардуино.

Библиотека UIPEthernet.

25.03. 2018 (HTTP://MYPRACTIC.RU/UROK -64-TCP-SERVER -I-KLIENT-NA-ARDUINO-BIBLIOTEKA- UIPETHERNET. HTML) Автор: ЭДУАРД (HTTP://MYPRACTIC.RU/ACCOUNT?USER=1)

(http://mypractic.ru

/wp-content/uploads/2018/03/Lesson63_0.png)

В уроке изучим Ардуино-библиотеку для работы с Ethernet контроллером ENC28J60. Напишем программы для создания TCP сервера и клиента.

Предыдущий урок (http://mypractic.ru/urok-63-lokalnaya-set-ethernet-modul-enc28j60-ego- podklyuchenie-k-plate-arduino.html) Список уроков (http://mypractic.ru/uroki- programmirovaniya-arduino-navigaciya-po-urokam) Следующий урок (http://mypractic.ru/urok- 65-analogovo-cifrovye-preobrazovaniya-arduino-v-fonovom-rezhime-biblioteka- backgroundadc.html)

Для подключения платы Ардуино к сети Ethernet я выбрал контроллер ENC28J60, как самый

дешевый и распространенный. О нем я рассказывал в предыдущем уроке.

Существует несколько Ардуино-библиотек для управления модулем ENC28J60. Я уверенно выбрал библиотеку UIPEthernet.

Библиотека обладает самыми широкими функциональными возможностями.

Работает надежно.

Интерфейс программирования (API) библиотеки полностью совместим с широко распространенной библиотекой Ethernet, которая используется совместно с модулем W5100. Т.е. все сказанное в этом уроке применимо для модуля W5100 и

(http://mypractic.ru

Катодная/goto/fn1защита .php)

(http://mypractic.ru/category /katodnaya-zashhita)(//freekassa.ru/)

Проекты Ардуино

(http://mypractic.ru/category /proekty-arduino)

Разработки

(http://mypractic.ru/category

/razrabotki)

Умное растениеводство

(http://mypractic.ru/category /umnoe-rastenievodstvo)

Умный дом

(http://mypractic.ru/category /umnyj-dom)

Уроки ESP32 (http://mypractic.ru/category /uroki-esp32)

Уроки STM32 (http://mypractic.ru/category /uroki-stm32)

Уроки Ардуино

(http://mypractic.ru/category /uroki-programmirovaniya- arduino)

Фасовочное оборудование

(http://mypractic.ru/category

/oborudovanie)

Электронные компоненты

(http://mypractic.ru/category /elektronnye-komponenty)

библиотеки Ethernet.

библиотеки UIPEthernet можно отнести большой объем кода. Но это функциональность.

Библиотека UIPEthernet.

о функциях библиотеки. Если не все будет понятно - ничего страшного.

. К этой части урока можно возвращаться, как к справочному материалу. раздел на отдельной странице, в виде справочника.

классы и соответствующие им функции.

инициализирует библиотеку и настройки для работы с сетью Ethernet.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.ru

 

 

 

 

subnetMask()

 

 

 

 

 

dnsServerIP()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

biblioteka-

 

(http://mypractic.ru/arduino-

 

(http://mypractic.ru/arduino-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ethernet-h/#1)

 

biblioteka-uipethernet-

 

 

 

biblioteka-uipethernet-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

h-ethernet-h/#3)

 

 

 

 

 

h-ethernet-h/#5)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

http://mypractic.ru

 

 

 

gatewayIP()

maintain() (http://mypractic.ru

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(http://mypractic/arduino.ru-biblioteka-

(http://mypractic.ru/arduino-

 

 

 

 

 

/arduino-biblioteka-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/goto/Auipethernet.rduinoSys-php-ethernet)-h/#2)

 

biblioteka-uipethernet-

 

uipethernet-h-ethernet-h/#6)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

h-ethernet-h/#4)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

инициализирует библиотеку и настройки для работы с сетью Ethernet.

(http://mypractic.ru/arduino-biblioteka-uipethernet-h-ethernet-h/#7)

Server – применяется для создания и работы с серверами.

http://mypractic.ru available() (http://mypractic.ru print() (http://mypractic.ru biblioteka- /arduino-biblioteka- /arduino-biblioteka- ethernet-h/#8) uipethernet-h-ethernet-h/#11) uipethernet-h-ethernet-h#13)

write() (http://mypractic.ru println() (http://mypractic.ru

.ru/arduino- /arduino-biblioteka- /arduino-biblioteka-

biblioteka-uipethernet- uipethernet-h-ethernet-h/#12) uipethernet-h-ethernet-h/#14) (http://mypractic.ru

h-ethernet-h/#9) /goto/fn1.php)

begin() (http://mypractic.ru

(//freekassa.ru/) /arduino-biblioteka-

uipethernet-h-ethernet-h/#10)

Класс Client – используется для создания и работы с клиентами.

 

Client (http://mypractic.ru

 

 

write() (http://mypractic.ru

read() (http://mypractic.ru

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/arduino-biblioteka-uipethernet-

 

 

/arduino-biblioteka-

 

 

 

/arduino-biblioteka-

 

 

 

h-ethernet-h/#15)

 

uipethernet-h-ethernet-h/#20)

 

 

uipethernet-h-ethernet-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

h/#24)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

EthernetClient()

 

 

print() (http://mypractic.ru

peek() (http://mypractic.ru

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(http://mypractic.ru/arduino-

 

 

/arduino-biblioteka-

 

 

 

/arduino-biblioteka-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

biblioteka-uipethernet-

 

uipethernet-h-ethernet-h/#21)

 

 

uipethernet-h-ethernet-

 

 

 

h-ethernet-h/#16)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

h/#25)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if (EthernetClient)

 

println() (http://mypractic.ru

flush() (http://mypractic.ru

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(http://mypractic.ru/arduino-

 

 

/arduino-biblioteka-

 

 

 

/arduino-biblioteka-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

biblioteka-uipethernet-

 

uipethernet-h-ethernet-h/#22)

 

 

uipethernet-h-ethernet-

 

 

 

h-ethernet-h/#17)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

h/#26)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

connected() (http://mypractic.ru

 

available() (http://mypractic.ru

 

stop() (http://mypractic.ru

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/arduino-biblioteka-uipethernet-

 

 

/arduino-biblioteka-

 

 

 

/arduino-biblioteka-

 

 

 

h-ethernet-h/#18)

 

uipethernet-h-ethernet-h/#23)

 

 

uipethernet-h-ethernet-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

h/#27)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

connect() (http://mypractic.ru

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/arduino-biblioteka-uipethernet-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

h-ethernet-h/#19)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Класс EthernetUDP – поддерживает UDP протокол.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Свежие записи

Базовое программное обеспечение контроллера автоматизированного выращивания растений

(КАВР). (http://mypractic.ru /bazovoe-programmnoe- obespechenie-kontrollera- avtomatizirovannogo- vyrashhivaniya-rastenij- kavr.html)

Контроллер

автоматизированного выращивания растений (КАВР), как развитие проекта управления гроубоксом. (http://mypractic.ru /kontrolleravtomatizirovannogo- vyrashhivaniya-rastenij-kavr- kak-razvitie-proekta- upravleniyagrouboksom.html)

Урок 34. Работа с контроллером DMA через CMSIS регистры. Практический опыт использования его для передачи данных в порты ввода/вывода. Разработка многоканального генератора импульсов. (http://mypractic.ru/urok-34- rabota-s-kontrollerom-dma- cherez-cmsis-registry- prakticheskij-opyt- ispolzovaniya-ego-dlya- peredachi-dannyx-v-porty- vvodavyvoda-razrabotka- mnogokanalnogo- generatora-impulsov.html)

Еще два варианта программного обеспечения контроллера гроубокса. (http://mypractic.ru/eshhe- dva-varianta-programmnogo- obespecheniya-kontrollera- grouboksa.html)

Урок 33. Прямой доступ к памяти в STM32. Контроллер DMA. (http://mypractic.ru/urok-33- pryamoj-dostup-k-pamyati- v-stm32-kontroller-dma.html)

Популярные записи

Уроки STM32 (http://mypractic.ru/urokistm32)

Уроки программирования Ардуино. (http://mypractic.ru /uroki-programmirovaniya-

 

begin() (http://mypractic.ru

 

 

 

 

 

beginPacket()

 

 

stop() (http://mypractic.ru

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

biblioteka-

 

 

(http://mypractic.ru/arduino-

 

 

 

 

/arduino-biblioteka-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ethernet-h/#28)

 

 

biblioteka-uipethernet-

 

uipethernet-h-ethernet-h/#36)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

h-ethernet-h/#32)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.ru

endPacket() (http://mypractic.ru

remoteIP() (http://mypractic.ru

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

biblioteka-

 

 

 

 

 

/arduino-biblioteka-

 

 

 

 

/arduino-biblioteka-

 

 

 

 

 

 

 

 

 

ethernet-h/#29)

uipethernet-h-ethernet-h/#33)

 

uipethernet-h-ethernet-h/#37)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.ru

 

 

 

 

 

 

parsePacket()

 

 

 

 

 

 

remotePort()

 

 

 

 

 

 

 

 

 

biblioteka-

 

 

(http://mypractic.ru/arduino-

 

(http://mypractic.ru/arduino-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ethernet-h/#30)

 

 

biblioteka-uipethernet-

 

 

biblioteka-uipethernet-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

h-ethernet-h/#34)

 

 

 

 

 

h-ethernet-h/#38)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.ru

 

 

available() (http://mypractic.ru

 

 

flush() (http://mypractic.ru

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

biblioteka-

 

 

 

 

 

/arduino-biblioteka-

 

 

 

 

/arduino-biblioteka-

 

 

 

 

 

 

 

 

 

ethernet-h/#31)

uipethernet-h-ethernet-h/#35)

 

uipethernet-h-ethernet-h/#39)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

версию библиотеки UIPEthernet-2.0.6 (http://mypractic.ru/downloads/arduino zip).

(http://mypractic.ru

Подключение модуля ENC28J60.

/goto/ArduinoSys.php)

 

Как подключить модуль я подробно рассказывал в уроке 63 (http://mypractic.ru/urok-63- -modul-enc28j60-ego-podklyuchenie-k-plate-arduino.html). Еще раз

источник питания с напряжением 3,3 В и током до 180 мА. Поэтому я к плате Arduino UNO. При работе с другими платами может дополнительный стабилизатор 3,3 В.

входы модуля ENC28J60 допускают непосредственное подключение к уровнями 5 В. Для соединения модуля с платой Ардуино нет

в согласующих резисторах.

подключается к плате Ардуино с помощью 10 проводов. Схема в уроке.

К компьютеру модуль подключается (урок 63 (http://mypractic.ru/urok-63-lokalnaya- (http://mypractic.ru

set-ethernet-modul-enc28j60-ego-podklyuchenie-k-plate-arduino.html)): /goto/fn1.php)

(//freekassaнепосредственно.ru/) – с помощью перекрестного кабеля; через роутер или коммутатор – с помощью прямого кабеля.

(http://mypractic.ru

/wp-content/uploads/2018/03/Lesson_64_17.jpg)

Общая постановка задачи.

О протоколе TCP я упоминал в конце урока 62. Сейчас скажу главное :

передаче данных предшествует установка соединения клиента и сервера;

данные при передаче защищены от искажения и потерь.

Мы просто посылаем данные, не беспокоясь о том, что они пропадут или будут доставлены с ошибками. Все заботы о доставке и целостности данных берет на себя протокол TCP.

Вернемся к нашей задаче, которую мы решали практически в каждом уроке, посвященном

arduino-navigaciya-po- urokam)

DS18B20 – датчик температуры с интерфейсом 1-Wire. Описание на русском языке. (http://mypractic.ru /ds18b20-datchik- temperatury-s-interfejsom- 1-wire-opisanie-na-russkom- yazyke.html)

Урок 2. Плата

STM32F103C8T6. Загрузка программы во FLASHпамять микроконтроллера через системный бутлоадер. (http://mypractic.ru/urok- 2-plata-stm32f103c8t6- zagruzka-programmy-vo- flash-pamyat- mikrokontrollera-cherez- sistemnyj-butloader.html)

Урок 23. Работа с UART через библиотеку HAL с использованием прерываний. (http://mypractic.ru/urok-23- rabota-s-uart-cherez- biblioteku-hal- s-ispolzovaniem- preryvanij.html)

Архивы

2021 (18) (http://mypractic.ru /2021)

2020 (11) (http://mypractic.ru /2020)

2019 (30) (http://mypractic.ru /2019)

2018 (17) (http://mypractic.ru /2018)

2017 (22) (http://mypractic.ru /2017)

2016 (77) (http://mypractic.ru /2016)

2015 (7) (http://mypractic.ru /2015)

обмену данными между платами Ардуино и компьютером. Напомню, у нас есть локальные подключенными к ним датчиками и исполнительными механизмами.

считывать состояние датчиков и управлять исполнительными механизмами.

только обмен данными. Поэтому формализуем задачу:

Ардуино с подключенным к ней модулем ENC28J60, т.е. сетевое устройство или локальный контроллер.

локальная Ethernet сеть из контроллера и компьютера. Попросту -устройство подключено к компьютеру, обычно через роутер.

в том, чтобы от компьютера предать данные Ардуино-устройству и из Ардуино в компьютер.

TCP сервер.

, что инициировать обмен данными будет компьютер.

такой задачи локальный контроллер должен быть сервером. Т.к. мы

TCP протокол, то TCP сервером.

(http://mypractic.ru

Компьютер должен быть клиентом. Клиента создадим, используя программу TCP/IP /goto/ArduinoSys.php)

Builder. С помощью нее будем передавать данные в локальный контроллер, т.е. в

.

полученные контроллером, будем выводить в монитор последовательного

IDE.

от контроллера компьютеру увидим опять же в окне программы

Builder позволяет создавать TCP серверы и клиенты на компьютере.

к категории “A free open source software” с лицензией GNU – свободное обеспечение, разрешенное к копированию и распространению. Загрузить ссылке TCP/IP Builder 1.9 (http://mypractic.ru/downloads/arduino

Скетч сервера выглядит так: (http://mypractic.ru

/goto/fn1.php)

Зарегистрируйтесь (http://mypractic.ru/?action-rcl=register) и оплатите. Всего 60 руб. в месяц за доступ(//freekassaко всем.ru/)ресурсам сайта!

//TCP сервер, возвращает полученные данные

#include <SPI.h> #include <UIPEthernet.h>

//определяем конфигурацию сети

byte mac[] = {0xAE, 0xB2, 0x26, 0xE4, 0x4A, 0x5C}; // MAC-адрес byte ip[] = {192, 168, 1, 10}; // IP-адрес

byte myDns[] = {192, 168, 1, 1}; // адрес DNS-сервера

byte gateway[] = {192, 168, 1, 1}; // адрес сетевого шлюза byte subnet[] = {255, 255, 255, 0}; // маска подсети

EthernetServer server(2000); // создаем сервер, порт 2000 EthernetClient client; // объект клиент

boolean clientAlreadyConnected= false; // признак клиент уже подключен

void setup() {

Ethernet.begin(mac, ip, myDns, gateway, subnet); // инициализация контроллера server.begin(); // включаем ожидание входящих соединений

Serial.begin(9600);

Serial.print("Server address:");

Serial.println(Ethernet.localIP()); // выводим IP-адрес контроллера

}

void loop() {

client = server.available(); // ожидаем объект клиент

if (client) {

// есть данные от клиента

if (clientAlreadyConnected == false) {

// сообщение о подключении

Serial.println("Client connected"); client.println("Server ready"); // ответ клиенту

clientAlreadyConnected= true;

> 0) {

read(); // чтение символа // передача клиенту

конфигурации сети описаны в уроке 62 (http://mypractic.ru/urok-62-texnologiya- MAC адрес выбирайте любым, только 2 младших разряда старшего октета

10. IP адрес я выбрал 192.168.1.10.

сетях с роутером IP адреса раздаются автоматически (DHCP протокол).

себе 192.168.1.1. Это же адрес сетевого шлюза.

присваивается адрес 192.168.1.2.

идут адреса других сетевых устройств.

(http://mypractic.ru

В уроке 62 (http://mypractic.ru/urok-62-texnologiya-klient-server.html) написано, как посмотреть

/goto/ArduinoSys.php)

адреса с помощью CMD команд.

ru/wp-content/uploads/2018/03/Lesson_64_1.png)

следующие действия:

Проверяет, если данные от клиента. (http://mypractic.ru

/goto/fn1Когда.php)приходят первые данные, пишет сообщение "Client connected" (Клиент

подключен) и передает клиенту "Server ready" (Сервер готов).

(//freekassa.ru/)

Все поступающие данные передает обратно клиенту.

Для проверки необходимо загрузить скетч в плату Ардуино и открыть монитор

последовательного порта. В окне монитора появится IP-адрес контроллера.

(http://mypractic.ru/wp-content/uploads/2018/03/Lesson_64_2.png)

Запустить TCP/IP Builder.

В строчке Local IP уже должен быть вписан адрес вашего компьютера. Надо добавить порт, для моей программы 2000.

Нажать кнопку Create Socket (Создать соккет).

В строке IP вписать IP адрес локального контроллера и порт.

Нажать Connect (Подключиться).

на компьютере будет создан клиент.

посылать данные из окна Send data. Полученные от сервера данные будут

Receive data.

(http://mypractic.ru

/goto/ArduinoSys.php)

ru/wp-content/uploads/2018/03/Lesson_64_3.png)

последовательного порта будут выводиться данные, поступившие на

(http://mypractic.ru

/goto/fn1.php)

(//freekassa.ru/)

(http://mypractic.ru/wp-content/uploads/2018/03/Lesson_64_4.png)

При первой посылке в окне монитора последовательного порта появится сообщение Client connected. В окне программы клиента будет ответное сообщение Server ready

Можете попробовать мою программу.

(http://mypractic.ru

/goto/ArduinoSys.php)

ru/wp-content/uploads/2018/03/Lesson_64_5.png)

текстового TCP клиента. Пояснять особенно нечего. Загрузить можно по

Зарегистрируйтесь (http://mypractic.ru/?action-rcl=register) и оплатите. Всего 60 руб. в месяц

(http://mypractic.ru

за доступ ко всем ресурсам сайта! /goto/fn1.php)

У меня(//freekassaиспользуется.ru/)роутер с WiFi. В сеть включен сотовый телефон. Если на телефоне

установить программу-клиент, к нашему серверу на Ардуино можно обращаться и от

телефона.

Из Google play я установил на телефон приложение Simple TCP Socket Tester.

(http://mypractic.ru/wp-content/uploads/2018/03/Lesson_64_6.png)

Выбрал режим - клиент, установил IP адрес, порт и соединился с нашим Ардуино-сервером.

(http://mypractic.ru

/goto/ArduinoSys.php)

(http://mypractic.ru/wp-content/uploads

_7.png)

TCP сервер близкий к практическому применению. Он должен:

от клиента зажигать и гасить светодиод на плате Ардуино;

(http://mypractic.ru

по запросу клиента передавать время, прошедшее с начала запуска программы

/goto/fn1.php)

платы (результат функции millis()).

(//freekassa.ru/)

Вывод 13, на который подключен светодиод платы, занят на управление модулем ENC28J60. Поэтому я подключил дополнительный светодиод на 2 вывод платы, через резистор. Этим светодиодом и будет управлять клиент.

Скетч этого варианта сервера:

Зарегистрируйтесь (http://mypractic.ru/?action-rcl=register) и оплатите. Всего 60 руб. в месяц за доступ ко всем ресурсам сайта!

//TCP сервер, управляет светодиодом, передает время

#include <SPI.h> #include <UIPEthernet.h>

//определяем конфигурацию сети

byte mac[] = {0xAE, 0xB2, 0x26, 0xE4, 0x4A, 0x5C}; // MAC-адрес byte ip[] = {192, 168, 1, 10}; // IP-адрес

byte myDns[] = {192, 168, 1, 1}; // адрес DNS-сервера

byte gateway[] = {192, 168, 1, 1}; // адрес сетевого шлюза byte subnet[] = {255, 255, 255, 0}; // маска подсети

EthernetServer server(2000); // создаем сервер, порт 2000

EthernetClient client; // объект клиент

void setup() {

Ethernet.begin(mac, ip, myDns, gateway, subnet); // инициализация контроллера server.begin(); // включаем ожидание входящих соединений

pinMode(2, OUTPUT); // вывод светодиода

}

void loop() {

client = server.available(); // ожидаем объект клиент if (client) {

//есть данные от клиента

>0) {

read(); // чтение символа

digitalWrite(2, LOW); // если 0, гасим светодиод digitalWrite(2, HIGH); // если 1, зажигаем светодиод

// передаем серверу время

программы проста.

поступает символ 0 светодиод гасится.

символ 1 светодиод зажигается.

от клиента любого символа в ответ передается время работы

работу сервера, например, моей программой.

(http://mypractic.ru

/goto/ArduinoSys.php)

(http://mypractic.ru

/goto/fn1.php)

(//freekassa.ru/)

(http://mypractic.ru/wp-content/uploads/2018/03/Lesson_64_8.png)

Вот моя специализированная программа, которая позволяет управлять нашим Ардуиносервером.

Здесь время выводится в ”человеческом виде”, светодиодом можно управлять с помощью

”птички”.

(http://mypractic.ru/wp-

_64_9.png)

загрузки программы:

(http://mypractic.ru/?action-rcl=register) и оплатите. Всего 60 руб. в месяц ресурсам сайта!

(http://mypractic.ru

/goto/ArduinoSysПо такому принципу.php) можно создавать более сложные устройства, с гораздо большим количеством данных и управляемых параметров.

DHCP сервер.

программах мы задавали IP адрес сервера явно. Использовали, так статические IP адреса. Практически все современные сети имеют возможность

распределения адресов. Сервер, использующий этот способ назначения IP DHCP сервером. Об этом написано в уроке 62 (http://mypractic.ru/urok-62-

server.html).

динамический IP адрес достаточно при инициализации контроллера указать

– mac адрес. Т.е. вместо

(http://mypractic.ru

/goto/fn1Ethernet.begin(mac,.php) ip, myDns, gateway, subnet); // инициализация контроллера

написать(//freekassa.ru/)

Ethernet.begin(mac); // инициализация контроллера с DHCP протоколом

С учетом изменений скетч первой программы будет выглядеть так:

Зарегистрируйтесь (http://mypractic.ru/?action-rcl=register) и оплатите. Всего 60 руб. в месяц за доступ ко всем ресурсам сайта!

// DHCP сервер, возвращает полученные данные

#include <SPI.h> #include <UIPEthernet.h>

byte mac[] = {0xAE, 0xB2, 0x26, 0xE4, 0x4A, 0x5C}; // MAC-адрес

EthernetServer server(2000); // создаем сервер, порт 2000 EthernetClient client; // объект клиент

boolean clientAlreadyConnected= false; // признак клиент уже подключен

void setup() {

Serial.begin(9600);

Serial.println("Getting IP address using DHCP"); if (Ethernet.begin(mac) == 0) {

Serial.println("Failed to configure using DHCP"); while(true) ; // зависаем по ошибке

}

// вывод IP адреса

Serial.print("IP address: ");

IPAddress ip = Ethernet.localIP(); for (byte i = 0; i < 4; i++) {

Serial.print(ip[i], DEC);

Serial.print(".");