В статье "Как у меня заработал WIFI для Arduino ESP8266 ESP-12E" рассказывал как заставить работать платы Arduino UNO с ESP8266 ESP-12E UART Wi-Fi.
Но зачем такие сложности, если есть уже совмещенная плата?
Вместо слоеного пирога из двух плат:
Заказал вот эту плату:
И она заработала безо всяких прошивок и перепрошивок.
Работает только на скорости 115200
Среда Arduino уже была настроена для работы.
Осталось только переключатели перещелкивать, чтобы заливать скетч в UNO.
Таблица положений переключателей есть здесь.
Вот только не упомянуто положение переключателей (1-4 ON), когда во время работы Mega328+ESP8266 CH340 мониторит порт и выводит в консоль передаваемые команды.
Как настроить среду Arduino объясняется здесь или здесь.
Таблица переключателей.
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
---|---|---|---|---|---|---|---|---|
CH340 connect to ESP8266 (upload sketch) |
OFF |
OFF |
OFF |
OFF |
ON |
ON |
ON |
NoUSE |
CH340 connect to ESP8266 (connect) |
OFF |
OFF |
OFF |
OFF |
ON |
ON |
OFF |
NoUSE |
CH340 connect to ATmega328 (upload sketch) |
OFF |
OFF |
ON |
ON |
OFF |
OFF |
OFF |
NoUSE |
Mega328+ESP8266 |
ON |
ON |
OFF |
OFF |
OFF |
OFF |
OFF |
NoUSE |
All modules work independent |
OFF |
OFF |
OFF |
OFF |
OFF |
OFF |
OFF |
NoUSE |
Совместная работа и мониторинг команд |
ON |
ON |
ON |
ON |
OFF |
OFF |
OFF |
NoUSE |
Передача информации на серверы Cayenne и RemoteXY.
Протестировал плату на решении задач, скетчи которых заливал в слоеный пирог из двух плат:
Подключаем Arduino UNO при помощи ESP8266-12E к облаку Cayenne.
Мониторинг Arduino UNO + ESP8266 через облачный сервер RemoteXY.
Эти сервисы предоставляют свои библиотеки для работы с ESP8266.
Все заработало сразу без изменений и мучений.
Необходимо в скетчах заменить скорость на 115200.
Передача информации на произвольный сервер.
Решение предыдущей задачи "Отправка данных из ESP8266WiFi на сервер с CMS MaxSite" с этой платой повторить не удалось.
Для отправки данных на произвольный сервис использовалась универсальная библиотека WiFiESP.
И оказалось, что эта библиотека не заработала с этой платой, выдавая
[WiFiEsp] Warning: Unsupported firmware 0.9.5
Действительно, модуль при обращении с соответствующей командой AT+GMR сообщает версию SDK 0.9.5:
AT+GMR
AT version:0.21.0.0
SDK version:0.9.5
В файле README.md библиотеки можно прочитать:
Supports ESP SDK version 1.1.1 and above (AT version 0.25 and above).
Попытки обновить прошивку при помощи flash_download_tools не увенчались успехом (да и не старался особо):
Ведь библиотеки Cayenne и RemoteXY для этой платы заработали без проблем!
Помогли статьи:
instructables.com/id/Arduino-Esp8266-Post-Data-to-Website и developer.alexanderklimov.ru/arduino/playground/uno_esp8266wifi
В этих статьях описывается способ обращения к ESP8266 обычными командами без библиотек.
Будем обрабатывать POST запрос к серверу при помощи плагина my_esp8266 для MaxSiteCMS, который принимает данные.
Заработал вот такой скетч.
// отсылает данные в плагин http://fil-tec.ru/tag/My_ESP8266 для MaxSite CMS String ssid ="Router name"; String password="**********"; String server = "my.site.ru"; // сайт, на котором установлен пагин My_esp8266 String uri = "/ajax/**************************"; // скопировать со страницы "Тест" админки плагина My_esp8266 адрес для обращения с запросами String PORT = "80"; int countTrueCommand; int countTimeCommand; boolean found = false; int valSensor = 1; String jsonString; // данные String PostHeader; // заголовок String data; int DHpin = 4; //sensor pin byte dat [5]; String temp ,hum; #define PIN_SWITCH_1 12 #define PIN_SWITCH_2 13 void setup() { pinMode (DHpin, OUTPUT); pinMode (PIN_SWITCH_1, OUTPUT); pinMode (PIN_SWITCH_2, OUTPUT); Serial.begin(115200); reset(); connectWifi(); } void reset() { Serial.println("AT+RST"); delay(1000); } //connect to your wifi network void connectWifi() { Serial.begin(115200); sendCommand("AT", 5, "OK"); sendCommand("AT+CWMODE=1", 5, "OK"); sendCommand("AT+CWJAP=\"" + ssid + "\",\"" + password + "\"", 20, "OK"); digitalWrite(PIN_SWITCH_2, (found == true)?LOW:HIGH); } byte read_data () { byte data; for (int i = 0; i < 8; i ++) { if (digitalRead (DHpin) == LOW) { while (digitalRead (DHpin) == LOW); // wait for 50us delayMicroseconds (30); // determine the duration of the high level to determine the data is '0 'or '1' if (digitalRead (DHpin) == HIGH) data |= (1 << (7-i)); // high front and low in the post while (digitalRead (DHpin) == HIGH); // data '1', wait for the next one receiver } } return data; } void start_test () { digitalWrite (DHpin, LOW); // bus down, send start signal delay (30); // delay greater than 18ms, so DHT11 start signal can be detected digitalWrite (DHpin, HIGH); delayMicroseconds (40); // Wait for DHT11 response pinMode (DHpin, INPUT); while (digitalRead (DHpin) == HIGH); delayMicroseconds (80); // DHT11 response, pulled the bus 80us if (digitalRead (DHpin) == LOW); delayMicroseconds (80); // DHT11 80us after the bus pulled to start sending data for (int i = 0; i < 4; i ++) // receive temperature and humidity data, the parity bit is not considered { Serial.println(i); dat[i] = read_data (); } pinMode (DHpin, OUTPUT); digitalWrite (DHpin, HIGH); // send data once after releasing the bus, wait for the host to open the next Start signal } void loop () { start_test (); // convert the bit data to string form hum = String(dat[0]); temp= String(dat[2]); jsonString = "secret=0000&name=ESP_8266WiFi&temp=" + temp + "&hum=" + hum; httppost(); delay(1000); } void httppost () { String postRequest = "POST " + uri + " HTTP/1.1\r\n" + "Host: " + server + "\r\n" + "User-Agent: ESP8266WiFi\r\n" + "Accept: application/xml\r\n" + "X-Requested-With: XMLHttpRequest\r\n" + "Referer: http://my.site.ru\r\n" + "Connection: close\r\n" + "Content-Length: " + jsonString.length() + "\r\n" + "Content-Type: application/x-www-form-urlencoded\r\n" + "\r\n" + jsonString; sendCommand("AT+CIPMUX=1", 5, "OK"); sendCommand("AT+CIPSTART=0,\"TCP\",\"" + server + "\"," + PORT, 15, "OK"); sendCommand("AT+CIPSEND=0," + String(postRequest.length() + 2), 4, ">"); sendCommand(postRequest, 5, "OK"); delay(1500); countTrueCommand++; sendCommand("AT+CIPCLOSE=0", 5, "OK"); } void sendCommand(String command, int maxTime, char readReplay[]) { while (countTimeCommand < (maxTime * 1)) { Serial.println(command);//at+cipsend delay(1500); if (Serial.find(readReplay)) //ok { found = true; break; } countTimeCommand++; } if (found == true) { // успешно digitalWrite(PIN_SWITCH_1, LOW); countTrueCommand++; countTimeCommand = 0; } if (found == false) { // неудачно digitalWrite(PIN_SWITCH_1, HIGH); countTrueCommand = 0; countTimeCommand = 0; } found = false; }
Комментариев: 5 RSS
1 Аноним 15-01-2022 09:58
Спасибо за статью!
При каком положении переключателей заливать этот скетч на плату?
2 Андрей 15-01-2022 13:01
Скеч в Arduino при положении, которое в таблице вот в этой строке:
CH340 connect to ATmega328 (upload sketch)
Но дело было давно, хотя проблем помню вообще не было. Значит в таблице верно было указано.
3 Аноним 15-01-2022 15:11
Спасибо! Немного разобрался. В режиме off-off-ON-ON-off-off-off-off скетч заливается, в режиме ON-ON-ON-ON-off-off-off-off работает. Но нестабильно. Делает пару отправок, потом зависает.
4 Дмитрий 29-08-2022 23:46
Я не совсем понял можно ли использовать wifi для подключения допустим к планшету?
5 Андрей 03-09-2022 23:05
wifi можно использовать для сессии обмена данными с сервером на котором запущено соответствующее приложение. Думаю что если на планшете создать соответственное приложение то можно.