Передача данных через wifi модуль

Arduino.ru

Есть два модуля ESP8266. Соеденил их между собой по WI-FI. Но вот не как не разберусь как передать данные с одного модуля на другой. Задача передать данные с датчиков с одногомодуля на другой. Делал при помощи AT команд на прошивках которые идут с модулями все работает. Но в Arduino запутался и уперся в стену.

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

udp.beginPacketMulticast(addr, port, WiFi.localIP()) эу пишем в передающем модуле

addr — это IP адрес принимающего модуля

WiFi.localIP() — IP модуля передающего данные

udp.beginMulticast(WiFi.localIP(), multicast_ip_addr, port) — эту пише в принимающем модуле.

WiFi.localIP() — IP модуля принимающего

multicast_ip_addr — IP адрес откуда принимаем

Этими командами мы настравиваем прием и передачу, а вот как передавать , какими командами?

Т.к должно же быть указанно откуда эти данные брать.

Как указывается конец передачи ? Этого я не смог найти. И где можно более подробно прочитать про команды передачи данных иодуля ESP8266 по WI-FI.

Накидал вот такой код в принимающем модуле:

#include #include //********************************Изменить для себя *********** #define AP_SSID "name" // Логин к вашему WiFi(кавычки оставить) #define AP_PASS "password" //Пароль у вашему WiFi #define TIMEZONE 3 // Часовой пояс const char* SSIDDAT = "Datchik"; // имя сети к которой будет подключаться втророй модуль изменить на желаемую const char* PASSSIDDAT = "oPeNseT1"; // пароль сети к которой будет подключаться втророй модуль изменить на желаемый //************************************************************* char packetBuffer[255]; //buffer to hold incoming packet char ReplyBuffer[] = "acknowledged"; // a string to send back char ssid[] = ""; char pass[] = ""; const char* error = "E0_"; unsigned int localPort = 2590; // local port to listen for UDP packets const int byte_am2321 = 10; byte packet_am2321[ byte_am2321]; WiFiUDP Udp; void setup() < Serial.begin(9600); delay(1000); WiFi.mode( WIFI_AP_STA); // режим точки и клиента WiFi.softAP( SSIDDAT,PASSSIDDAT); // Соединение с WiFi if( !ConnectWiFi(AP_SSID,AP_PASS) ) < error = "E1_"; // неудачное подключение WiFi >else error = "E2_"; // удачное подключение WiFi Serial.print('A'); // _ означает начало строки с данными     Serial.print(error); // выдача в порт информации об ошибке delay(1000); Udp.begin(localPort); > //########################################### // Основная программа void loop() < int packetSize = Udp.parsePacket(); if (packetSize) < Serial.print("Received packet of size "); Serial.println(packetSize); Serial.print("From "); IPAddress remoteIp = Udp.remoteIP(); Serial.print(remoteIp); Serial.print(", port "); Serial.println(Udp.remotePort()); // чтение пакета int len = Udp.read(packetBuffer, 255); if (len >0) < packetBuffer[len] = 0; >Serial.println("Contents:"); Serial.println(packetBuffer); // отправка принятого пакета Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); Udp.write(ReplyBuffer); Udp.endPacket(); > > //#################################### /** * Соединение с WiFi */ bool ConnectWiFi(const char *ssid, const char *pass) < // Три попытки соединения по WiFi for( int i=0; idelay(1000); > > return false; >

И такой код для передающего модуля. Этот модуль читает данные с датчика AM2321 и должен отправлять на второй модуль ESP8266

#include #include #include #include #include //********************************Изменить для себя *********** #define AP_SSID "Datchik"//"Datchik" // Логин к вашему WiFi(кавычки оставить) #define AP_PASS "oPeNseT1"//"oPeNseT1" //Пароль у вашему WiFi //********************************************************* unsigned int localPort = 2590; char ssid[] = ""; char pass[] = ""; const char* error = "E0_"; const char* buffer_data =""; const int NTP_PACKET_SIZE = 48; byte packetBuffer[ NTP_PACKET_SIZE]; IPAddress ip_test (192, 168, 4, 1); WiFiUDP Udp; void setup() < Wire.begin(); // подключение к шине i2c Serial.begin(9600); // запуск последовательного порта WiFi.mode( WIFI_AP_STA); // WiFi.mode( WIFI_STA); // режим клиента // WiFi.softAP( SSIDDAT,PASSSIDDAT); // Соединение с WiFi if( !ConnectWiFi(AP_SSID,AP_PASS) ) < error = "E1_"; // неудачное подключение WiFi >else error = "E2_"; // удачное подключение WiFi Serial.print("\r\n A"); // А - начало строки, _ означает конец строки с данными Serial.print(error); // выдача в порт информации об ошибке Udp.begin(localPort); // открываем порт > void loop() < AM2321 th; th.read(); if (Udp.beginPacket(ip_test, localPort)) //устанавливаем соединение с удаленным устройством < Serial.println ("IP OK"); >else Serial.println ("IP Error"); Udp.write(th.temperature); // отправляем температуру Udp.endPacket(); Udp.beginPacket(ip_test, localPort); Udp.write(th.humidity); // отправляем твлажность Udp.endPacket(); Udp.stop(); //Разрывает соединение с сервером, освобождая все ресурсы, используемые во время UDP-сессии. Serial.print("Temp: "); Serial.print(th.temperature/10.0); // температура Serial.print(",Vlaga: " ); Serial.print(th.humidity/10.0); // Влажность Serial.print ("\r\n"); ESP.deepSleep(900*1000000,WAKE_RFCAL); // время сна 30 минут > //###################################### /** * Соединение с WiFi */ bool ConnectWiFi(const char *ssid, const char *pass) < // Три попытки соединения по WiFi for( int i=0; idelay(500); > > return false; >

Проблема в том что в передающем модуле какой бы я не задал IP адрес всегда пишет что «IP OK». При задании правильного адреса данные не приходят на второй модуль. Второй модуль соответственно молчит т.к нет принимаемых данных. Подскажите где я напортачил ?

Читайте также:  Wi fi контроллер spi

Источник

Отправляем данные в ThingSpeak через WiFi модуль ESP8266.

Ali radio

WiFi модуль ESP8266 удобен для управления устройствами в интернете вещей (IoT). Чтобы контролировать ваши устройства удаленно необходимо иметь настроенный Веб-сервер, на который будут передаваться данные или открыть доступ к роутеру из интернета. Другой, более удобный способ — воспользоваться бесплатным сервисом ThingSpeak. Как работать с данным сервисом связкой WiFi модуля ESP8266 и отладочной платы FRDM-KL25Z можно узнать под катом.

Визуализация данных в ThingSpeak

Приведенную ниже инструкцию описал в блоге [Erich Styger]. Он выбрал ThingSpeak для удаленного контроля данных со своих устройств. Есть много других доступных IoT (Internet of Things) платформ, но эта привлекла автора открытым исходным кодом, хорошей инфраструктурой и инструментами визуализации.

Как начать работать с ThingSpeak.

Перед тем, как начать использовать ThingSpeak необходимо создать и настроить аккаунт:

1. Регистрируем бесплатный аккаунт на сайте thingspeak.com

2. Переходим в Channels и создаем новый канал. Каналу будет присвоен Channel ID (который понадобится позже). Вводим имя и описание канала. Остальные поля можно пока оставить незаполненными. Нажимаем Save на странице ниже.

Создание нового канала в ThingSpeak

3. Переходим во вкладку API Keys и там копируем сгенерированный API Key.

Получение API Key в ThingSpeak

4. Теперь можно протестировать соединение вставив следующую строку в браузер:

В строке необходимо поменять значение API_KEY на свое, у автора получился следующий запрос:

Этот запрос добавит данные ‘0’ в только что созданный канал ‘field1′. Сервер ответит количеством точек данных.

Тестирование канала

5. Следующим запросом можно проверить результат:

API_KEY и CHANNEL_ID также нужно поменять на свои значения:

Добавленные данные

6. Таким образом можно добавлять множество точек данных и затем получить график:

Визуализация данных в ThingSpeak

Теперь можно подключать ESP8266 и отправлять через модуль данные на сервер ThingSpeak.

Читайте также:  Узнать пароль от вайфая интерсвязь

AT-команды для управления ESP8266.

Для начала рассмотрим последовательность AT-команд для управления ESP8266. Предполагается, что ESP8266 уже подключен к точке доступа. Нам необходимо разрешить множественные соединения командой:

Затем устанавливаем TCP соединение с сервером ThingSpeak (184.106.153.149), по 80 порту. Т.к. разрешены множественные соединения [Erich Styger] передал канал 4 (AT+CIPSTART=4):

Теперь используем команду CIPSEND для отправки данных. Первое значение — id канала, указанного выше (4), второе — количество отправляемых символов в строке, которая будет отправляться (включая “\r\n” в конце строки!). В данном случае 44 символа:

что означает «готов принимать данные». Данные можно отправить с помощью GET запроса:

здесь‘/update’ — это команда серверу обновить точки, затем следует API ключ, имя поля и само значение (в данном случае 60).

После окончания отправки данных TCP соединение нужно закрыть:

Теперь можно просмотреть графическое отображение отправленных данных в ThingSpeak:

Отправка данных в ThingSpeak через ESP8266

Как ThingSpeak, так и WiFi модуль ESP8266 свободно работают с популярными микроконтроллерами и микрокомпьютерами: Arduino, Raspberry Pi, FRDM-KL25Z и др. [Erich Styger] написал функцию автоматической отправки данных для FRDM-KL25Z. Исходники можно посмотреть Гитхабе.

Приведенные шаги помогут начать работать с WiFi модулем ESP8266 и облачным сервисом ThingSpeak для построения своего интернета вещей. Платформа ThingSpeak предоставляет множество других API и плагинов для различных приложений. Например, можно отправлять сообщения в Twitter и выполнять запросы в заданное время.

Источник

Оцените статью
Adblock
detector