Отправка данных через esp8266 с помощью arduino
Я пытаюсь отправить данные GPS с помощью esp8266, используя плату Arduino. Я использовал ресивер neo-6m и модуль esp8266-01. Ниже моя программа, использующая AT-команды. Программа успешно скомпилирована и загружена на плату Arduino, но единственный вывод, который она выдает на последовательном мониторе, — это простое начало. Ни одна из AT-команд не выполняется. Даже модуль не подключается к wi-fi. Я не могу указать на ошибку в моем коде. Помогите, пожалуйста, найти возможную ошибку. Спасибо
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
TinyGPSPlus gps;
String ssid = "JioFi_244DB1D";
String password = "q52fq74c9s";
SoftwareSerial esp(6,7);
SoftwareSerial ss(8,9);
char Lat[12], Lon[12], alt[12],ch;
byte NOS;
byte l;
String webpage;
void reset(){
esp.println("AT+RST");
delay(1000);
if(esp.find("OK"))
Serial.println("Module Reset");
}
void ConnectWifi(){
esp.println("AT+CIPMUX=1");
esp.println("AT+CWMODE=1");
String cmd = "AT+CWJAP=\""+ssid+"\",\""+password+"\"";
esp.println(cmd);
delay(4000);
if(esp.find("OK"))
Serial.println("Connected!");
else {
ConnectWifi();
Serial.println("Connecting..");
}
}
void setup(){
esp.begin(9600);
Serial.begin(9600);
Serial.println("begin");
reset();
ConnectWifi();
esp.println("AT+CIFSR");
while(esp.available()>0){
if(esp.find("STAIP"))
{Serial.println("IP Address:");
while(esp.available()>0)
{ch=esp.read();
Serial.print(ch);}
}}}
void loop() {
ss.listen();
delay(2000);
while(ss.available()>0)
{
gps.encode(ss.read());
{
if(gps.location.isValid()){
// dtostrf(gps.location.lat(),1,6,Lat);
//dtostrf(gps.location.lng(),1,6,Lon);
webpage = "<!DOCTYPE html><html><body><form method = \"post\" action =\"http://localhost/php/esppost.php\"><метка для = \"широта\">Широта:<\label><тип ввода=число id = \"широта\" name= \"широта\" только для чтения = ";
// L = Широта.длина();
l= webpage.length();
esp.println("AT+CIPSEND=0,");
esp.print(9+l+5);
esp.println(webpage);
esp.print(gps.location.lat(),6);
esp.print("\">");
delay(500);
webpage = "<Label for = \"Longitude\">Longitude:</Label><input type = \"number\" id = \"Longitude\" name = \"Longitude\" readonly value =\"";
l=webpage.length();
//L = Lon.length();
esp.println("AT+CIPSEND=0,");
esp.print(9+l+5);
esp.println(webpage);
esp.print(gps.location.lng(),6);
esp.print("\">");
}
else
webpage="Location Invalid";
l=webpage.length();
esp.println("AT+CIPSEND=0,");
esp.print(l+2);
esp.println(webpage);
delay(500);
if(gps.altitude.isValid()){
dtostrf(gps.altitude.meters(),1,6,alt);
webpage = "<label for=\"Altitude\">Altitude:<\label><input type = number id=\"Altitude\" name=\"Altitude\" readonly value=";
l=webpage.length();
//L= alt.length();
esp.println("AT+CIPSEND=0,");
esp.print(9+l+2);
esp.println(webpage);
esp.print(gps.altitude.meters(),6);
esp.print("\">");
}
if(gps.satellites.isValid()){
NOS= gps.satellites.value();
webpage= "<lable for = \"NOS \"> Number of Satellites:<\label><input type=number id=NOS name= NOS readonly value =";
l= webpage.length();
esp.println("AT+CIPSEND=0,");
esp.print(2+l+22);
esp.println(webpage);
esp.print(gps.satellites.value());
esp.print("></body></html>");
delay(500);
}}
esp.println("AT+CIPCLOSE");
}
}
@user3185742, 👍0
Обсуждение1 ответ
SoftwareSerial не может прослушивать два экземпляра. Существует функция .listen()
для переключения между экземплярами SoftwareSerial.
Прошивка esp8266 AT не ждет, пока вы прослушаете экземпляр SoftwareSerial. Если есть соединение с сервером, он отправляет +IPD и данные. Если экземпляр SoftwareSerial не прослушивает, информация о клиентском соединении теряется.
Вы должны постоянно прослушивать esp8266, поэтому вы не можете использовать два экземпляра SoftwareSerial.
Вы можете использовать вывод RX Uno для получения данных от модуля GPS через аппаратный последовательный порт.
Я внес некоторые изменения в свою программу. Я подключил GPS Tx к Rx моей платы UNO, заменил ss на Serial и удалил ss.listen(). но все равно получаю тот же результат, что и раньше. Не могли бы вы предложить мне, какую ошибку я все еще делаю?, @user3185742
@ user3185742, этот ответ помог? скорость передачи какого интерфейса вы изменили?, @Juraj
- Подключение проводов и кодирование в GPS-модуле GY-NEO6MV2 с ESP8266-01
- Могу ли я подключить GPS-модуль NEO-6M и ESP8266 к одному и тому же Arduino?
- Как читать и записывать EEPROM в ESP8266
- Как сделать выводы Tx и Rx на ESP-8266-01 в выводах GPIO?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- Как заставить 5-вольтовое реле работать с NodeMCU
- Как исправить: Invalid conversion from 'const char*' to 'char*' [-fpermissive]
- ESP8266 не подключается к Wi-Fi
У вас есть RX на TX для
esp
?, @Jurajда, я использую аналогичные соединения, @user3185742
написать минимальный тестовый скетч, @Juraj
Спасибо. Я изменил скорость передачи данных на 115200, и теперь все работает хорошо., @user3185742