В статье "Как у меня заработал 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 можно использовать для сессии обмена данными с сервером на котором запущено соответствующее приложение. Думаю что если на планшете создать соответственное приложение то можно.