Данные, полученные ардуино от модуля ESP8266 01 не являются полными
Я отправляю некоторые данные из модуля ESP8266 01 в Arduino. Но данные, полученные Arduino, не являются полными.
Ниже приведены изображения выходных данных модуля ESP8266 01 и Arduino.
Вот код модуля ESP8266 01:-
#include <ESP8266WiFi.h>
#include<String.h>
char c,e; //хранит байты, поступающие с сервера
int DEBUG = 0;
int co=0; //управление отправкой оповещения
const char* ssid = "ssid"; //ваш SSID WIFI
const char* password = "password"; // пароль Wifi
//--------------------------------------------
const char* host = "api.thingspeak.com";
void setup() {
//dht.begin();
Serial.begin(115200);
delay(10);
// Мы начинаем с подключения к сети Wi-Fi
if (DEBUG){
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
}
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
if (DEBUG){
Serial.print(".");
}
}
if (DEBUG){
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
}
int value = 0;
void loop() {
delay(1000);
++value;
if (DEBUG){
Serial.print("connecting to ");
Serial.println(host);
}
// Используйте класс WiFiClient для создания TCP-соединений
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}
if (DEBUG){
Serial.print("Requesting URL: ");
}
//============================================================================================================
// Отправка управляющей информации в arduino последовательно
//============================================================================================================
// This will send the request to the server
client.print(String("GET ") + "/channels/******/feeds.json?api_key=*****************&results=2 HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n"); // получить информацию об управлении устройством
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 5000) {
Serial.println(">>> Client Timeout !");
client.stop();
return;
}
}
// Прочитайте все строки ответа с сервера и распечатайте их на последовательный
while(client.available()){
String line = client.readStringUntil('\r');
Serial.print(line); // received by arduino serially
}
//Serial.println("closing connection");
}
Вот код Arduino:-
//This sketch in the implementation of home automation
#include <SoftwareSerial.h>// import the serial library
#include<String.h>
//-----------------------------------------
// pin definations
//-----------------------------------------
#define Light 2 // pin 2 to control light
#define fan 3 // pin 3 to control fan
//------------------------------------------
// variables
//------------------------------------------
char e;
int p=0,q=0; //these variables prevent switching ON/OFF of already turned ON/OFF devices
int DEBUG = 1;
SoftwareSerial home_monitor(10, 11); // RX, TX
char control_data; // the data transmitted over Bluetooth
void setup() {
// put your setup code here, to run once:
home_monitor.begin(115200);
Serial.begin(9600);
pinMode(13,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
if (home_monitor.available()){
control_data=home_monitor.read(); // getting control information from ESP8266 serially
e=control_data;
if (DEBUG){
Serial.print(control_data);
}
//Serial.print(e);
//============================================================================================================
// Device Control
//============================================================================================================
// Performing required operations based on the value of channel
//-------------------------------------------------------------
// LIGHT
//-------------------------------------------------------------
if(e=='0'&&p==0) //Light ON
{
if (DEBUG){
Serial.println("Light ON");
}
digitalWrite(Light,LOW);
p=1;
}
if(e=='1'&&p==1) //Light off
{
if (DEBUG){
Serial.println("Light OFF");
}
digitalWrite(Light,HIGH);
p=0;
}
//-------------------------------------------------------------
// Heater
//-------------------------------------------------------------
if(e=='2'&&q==0)
{
if (DEBUG){
Serial.println("Fan ON");
}
digitalWrite(fan,LOW);
q=1;
}
if(e=='3'&&q==1)
{
if (DEBUG){
Serial.println("Fan OFF");
}
digitalWrite(fan,HIGH);
q=0;
}
}
}
@Saifuddin95, 👍-1
Обсуждение1 ответ
Вы используете client.print ()
, а Arduino использует home_monitor.read()
для получения сообщения (если я правильно понял). Что я сделал в своем скетче, так это изменил home_monitor.read()
на home_monitor.readStringUntil('\n')
.
Также перед тем, как ESP отправит сообщение через client.print ()
, рекомендуется запустить клиент.метод flush ()
, поэтому он ожидает, пока все исходящие символы в буфере не будут отправлены, перед отправкой следующего.
При использовании ESP вы должны знать о методе полезной доходности ()
(вызовите его в конце цикла). Это позволяет ESP завершить свои фоновые обязанности, прежде чем продолжить (не вызывая этот метод может привести к некоторым проблемам.
- AT-команда не отвечает на последовательный монитор
- Отправка данных Arduino в MySQL с помощью phpMyAdmin и XAMPP на Windows10
- Arduino выводит значения мусора на serial monitor с ESP8266
- ошибка: espcomm_upload_mem failed при загрузке скетча
- фатальная ошибка ESP8266WiFi.h: Такого файла или каталога нет
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Получить данные с сайта с помощью ESP8266 с помощью AT-команд
- Захват изображений с OV7670 (без FIFO) с использованием Arduino Uno?
'Serial.begin(115200);
на ESP8266 и
Serial.begin(9600);` на Arduino. Попробуйте использовать равное значение битрейта., @AltAir