Проблема с отправкой строк на другой ESP
У меня возникли проблемы с получением данных из другого esp. У меня есть два esp8266, один из которых является точкой доступа, к которой подключен ЖК-дисплей nextion. Точка доступа считывает нажатия кнопок с ЖК-дисплея, а затем отправляет сообщения на другой esp (точку станции), чтобы включить соответствующие цифровые контакты. К точке станции подключены два датчика dht22. Сейчас я пытаюсь передать данные о температуре от одного из датчиков к точке доступа, чтобы распечатать данные на экране, но у меня возникли некоторые проблемы (либо с отправкой, либо с получением данных датчика, не знаю, как это проверить). Вот код точки доступа:
//это точка доступа
#include <doxygen.h>
#include <NexButton.h>
#include <NexCheckbox.h>
#include <NexConfig.h>
#include <NexCrop.h>
#include <NexDualStateButton.h>
#include <NexGauge.h>
#include <NexGpio.h>
#include <NexHardware.h>
#include <NexHotspot.h>
#include <NexNumber.h>
#include <NexObject.h>
#include <NexPage.h>
#include <NexPicture.h>
#include <NexProgressBar.h>
#include <NexRadio.h>
#include <NexRtc.h>
#include <NexScrolltext.h>
#include <NexSlider.h>
#include <NexText.h>
#include <NexTimer.h>
#include <Nextion.h>
#include <NexTouch.h>
#include <NexUpload.h>
#include <NexVariable.h>
#include <NexWaveform.h>
#include <SoftwareSerial.h>
#include <ESP8266WiFi.h>
#include <Nextion.h>
//вещи для Wi-Fi
WiFiServer server(80);
IPAddress IP(192, 168, 4, 15);
IPAddress mask = (255, 255, 255, 0);
//булевы значения для проверки
bool Red1=false;
bool Green1=false;
bool Blue1=false;
bool Red2=false;
bool Green2=false;
bool Blue2=false;
bool Relay1=false;
bool Relay2=false;
bool AmbientTemp=false;
//ints для временных данных
//Строка tempOutside=" ";
String tempInside=" ";
String humOutside=" ";
String humInside=" ";
//кнопки
// идентификатор страницы,id,""имя"
NexButton b0 = NexButton(1,2,"b0");//red1
NexButton b1 = NexButton(1,3,"b1");//зеленый1
NexButton b2 = NexButton(1,4,"b2");//синий1
NexButton b7 = NexButton(3,2,"b7");//relay1
NexButton b8 = NexButton(3,3,"b8");//relay2
NexButton b9 = NexButton(2, 14, "b9");
NexText t8 = NexText(2,10,"t8");//температура внутри
NexText t9 = NexText(2,11,"t9");//температура снаружи
NexText t10 = NexText(2,12,"t10");//влажность внутри
NexText t11 = NexText(2,13,"t11");//влажность снаружи
NexTouch *nex_listen_list[] = {
&b0,
&b1,
&b2,
&b7,
&b8,
&b9,
NULL
};
//светодиодная лента 1
void b0PushCallback(void *ptr) {
Red1=true;
}
void b1PushCallback(void *ptr) {
Green1=true;
Serial.println("Green1");
}
void b2PushCallback(void *ptr) {
Blue1=true;
}
// реле
void b7PushCallback(void *ptr) {
Relay1=true;
}
void b8PushCallback(void *ptr) {
Relay2=true;
}
void b9PushCallback(void *ptr) {
AmbientTemp=true;
}
void setup() {
Serial.begin(9600);
nexInit();
b0.attachPush(b0PushCallback,&b0);
b1.attachPush(b1PushCallback,&b1);
b2.attachPush(b2PushCallback,&b2);
b7.attachPush(b7PushCallback,&b7);
b8.attachPush(b8PushCallback,&b8);
b9.attachPush(b9PushCallback,&b9);
//часть Wi-Fi
WiFi.mode(WIFI_AP);
WiFi.softAP("Wemos_AP", "Wemos_comm");
WiFi.softAPConfig(IP, IP, mask);
server.begin();
Serial.println();
Serial.println("accesspoint_bare_01.ino");
Serial.println("Server started.");
Serial.print("IP: "); Serial.println(WiFi.softAPIP());
Serial.print("MAC:"); Serial.println(WiFi.softAPmacAddress());
}
void loop() {
nexLoop(nex_listen_list);
//опять вайфай
WiFiClient client = server.available();
if (!client) {
return;
}
//Запрос строки = client.readStringUntil('\r');
Serial.println("********************************");
//Serial.println("От станции: " + запрос);
client.flush();
// полоса 1
if (Red1==true){
client.print("redOne\r");
Serial.println("Red1");
Red1=false;
}
if (Green1==true){
client.println("greenOne\r");
Green1=false;
}
if (Blue1==true){
client.println("blueOne\r");
Blue1=false;
}
// реле
if (Relay1==true){
client.println("relayOne\r");
Relay1=false;
}
if (Relay2==true){
client.println("relayTwo\r");
Serial.println("Relay2");
Relay2=false;
}
if (AmbientTemp==true){
client.println("AmbientTemp\r");
Serial.println("ambient temp");
AmbientTemp=false;
}
String tempOutside=client.readStringUntil('\r');
Serial.println("tempOutside: ");
Serial.println(tempOutside);
//t8.setText(tempOutside);
//tempInside=client.readStringUntil('\b');
//t9.setText(tempOutside);
//humInside=client.readStringUntil('\e');
//t10.setText(humInside);
//humOutside=client.readStringUntil('\f');
//t11.setText(humOutside);//halp
//Serial.println(humOutside);
//Serial.println("humoutside: ");
//Serial.print("t11.txt=");
//Serial.print(humOutside.toInt());
//Serial.write(0xff);
//Serial.write(0xff);
//Serial.write(0xff);
Serial.println("Byte sent to the station: ");
//Serial.println(client.println("реееееееееееееееееее\r"));
//Serial.println(client.println("IamAlive\r"));
}
А вот код точки доступа:
#include <DHT.h>
#include <DHT_U.h>
#include <ESP8266WiFi.h>
#define DHTPIN 3 // снаружи
#define DHTPIN2 0 //внутри
#define DHTTYPE DHT22//тип датчика, который я использую
DHT dht(DHTPIN, DHTTYPE); //снаружи
DHT dht2(DHTPIN2, DHTTYPE); //внутри
//pin
const int Red = 5;
const int Green = 4;
const int Blue = 14;
const int Relay1= 12;
const int Relay2= 13;
// логические значения для включения/выключения (состояние)
bool RedS=false;
bool GreenS=false;
bool BlueS=false;
bool Relay1S=false;
bool Relay2S=false;
bool AmbientTempS=false;
char ssid[] = "Wemos_AP"; // SSID вашей точки доступа
char pass[] = "Wemos_comm"; // пароль вашей точки доступа
IPAddress server(192,168,4,15); // IP-адрес точки доступа
WiFiClient client;
void setup() {
Serial.begin(9600);
dht.begin();
dht2.begin();
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, pass); // подключается к точке доступа Wi-Fi
Serial.println();
Serial.println("Connection to the AP");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println();
Serial.println("Connected");
Serial.println("station_bare_01.ino");
Serial.print("LocalIP:"); Serial.println(WiFi.localIP());
Serial.println("MAC:" + WiFi.macAddress());
Serial.print("Gateway:"); Serial.println(WiFi.gatewayIP());
Serial.print("AP MAC:"); Serial.println(WiFi.BSSIDstr());
//контакты
pinMode(Red, OUTPUT);
pinMode(Green, OUTPUT);
pinMode(Blue, OUTPUT);
pinMode(Relay1, OUTPUT);
pinMode(Relay2, OUTPUT);
digitalWrite(Red, LOW);
digitalWrite(Green, LOW);
digitalWrite(Blue, LOW);
digitalWrite(Relay1, LOW);
digitalWrite(Relay2, LOW);
}
void loop() {
client.connect(server, 80);
Serial.println("********************************");
Serial.print("Byte sent to the AP: ");
Serial.println(client.print("Anyo\r"));
String answer = client.readStringUntil('\r');
Serial.println("From the AP: "+answer);
int h = dht.readHumidity(); //влажность снаружи
int t = dht.readTemperature(); //температура снаружи
int h2 = dht2.readHumidity(); //влажность снаружи
int t2 = dht2.readTemperature(); //температура снаружи
Serial.println("temp outside: ");
Serial.println(t);
Serial.println("Thing: ");
//Serial.println("temp внутри:");
//Серийный.println(t2);
//client.print(String(t2)+'\b');
//Serial.println("гул снаружи:");
//Серийный.println(h);
//client.print(String(h)+'\e');
//Serial.println("гул внутри:");
//Серийный.println(h2);
//Serial.println(client.print(String(h2)+"\f"));
client.flush();
//вещи
client.println(String(t)+'\r');
// еще раз
if(answer=="redOne"){
if (RedS==false){
digitalWrite(Red, HIGH);
RedS=true;
Serial.println("Red1 ON");
}
else{
digitalWrite(Red, LOW);
RedS=false;
Serial.println("Red1 OFF");
}
}
if(answer=="greenOne") {
if (GreenS==false){
Serial.println("Green1 ON");
GreenS=true;
digitalWrite(Green, HIGH);
}
else{
Serial.println("Green1 OFF");
GreenS=false;
digitalWrite(Green, LOW);
}
}
if(answer=="blueOne") {
if (BlueS==false){
Serial.println("Blue1 ON");
BlueS=true;
digitalWrite(Blue, HIGH);
}
else{
Serial.println("Blue1 OFF");
BlueS=false;
digitalWrite(Blue, LOW);
}
}
if(answer=="relayOne") {
if (Relay1S==false){
Serial.println("Relay1 ON");
Relay1S=true;
digitalWrite(Relay1, HIGH);
}
else{
Serial.println("Relay1 OFF");
Relay1S=false;
digitalWrite(Relay1, LOW);
}
}
if(answer=="relayTwo") {
if (Relay2S==false){
Serial.println("Relay2 ON");
Relay2S=true;
digitalWrite(Relay2, HIGH);
}
else{
Serial.println("Relay2 OFF");
Relay2S=false;
digitalWrite(Relay2, LOW);
}
if(answer=="AmbientTemp") {
if (AmbientTempS==false){
Serial.println("AmbientTemp ON");
AmbientTempS=true;
}
else{
Serial.println("AmbientTemp OFF");
AmbientTempS=false;
digitalWrite(Red, LOW);
digitalWrite(Green, LOW);
digitalWrite(Blue, LOW);
}
while(AmbientTempS==true){
Serial.println("Ambient temp is on!");
}
}
client.stop();
delay(2000);
}
}
Спасибо и извините за любые ошибки, английский не мой родной язык.
@Ferferite, 👍0
Обсуждение1 ответ
Лучший ответ:
Разобрался, не совсем уверен, что заставляет его не отправлять сообщения, но ниже приведен код, который работает.
#include <ESP8266WiFi.h>
#include <DHT.h>
#include <DHT_U.h>
#define DHTPIN 3 // снаружи
#define DHTPIN2 0 //внутри
#define DHTTYPE DHT22//тип датчика, который я использую
DHT dht(DHTPIN, DHTTYPE); //снаружи
DHT dht2(DHTPIN2, DHTTYPE); //внутри
//pin
const int Red = 5;
const int Green = 4;
const int Blue = 14;
const int Relay1= 12;
const int Relay2= 13;
// логические значения для включения/выключения (состояние)
bool RedS=false;
bool GreenS=false;
bool BlueS=false;
bool Relay1S=false;
bool Relay2S=false;
bool AmbientTempS=false;
char ssid[] = "Wemos_AP"; // SSID вашей точки доступа
char pass[] = "Wemos_comm"; // пароль вашей точки доступа
IPAddress server(192,168,4,15); // IP-адрес точки доступа
WiFiClient client;
void setup() {
Serial.begin(9600);
dht.begin();
dht2.begin();
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, pass); // подключается к точке доступа Wi-Fi
Serial.println();
Serial.println("Connection to the AP");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println();
Serial.println("Connected");
Serial.println("station_bare_01.ino");
Serial.print("LocalIP:"); Serial.println(WiFi.localIP());
Serial.println("MAC:" + WiFi.macAddress());
Serial.print("Gateway:"); Serial.println(WiFi.gatewayIP());
Serial.print("AP MAC:"); Serial.println(WiFi.BSSIDstr());
//pin
pinMode(Red, OUTPUT);
pinMode(Green, OUTPUT);
pinMode(Blue, OUTPUT);
pinMode(Relay1, OUTPUT);
pinMode(Relay2, OUTPUT);
digitalWrite(Red, LOW);
digitalWrite(Green, LOW);
digitalWrite(Blue, LOW);
digitalWrite(Relay1, LOW);
digitalWrite(Relay2, LOW);
}
void loop() {
int h = dht.readHumidity(); //влажность снаружи
int t = dht.readTemperature(); //температура снаружи
int h2 = dht2.readHumidity(); //влажность снаружи
int t2 = dht2.readTemperature(); //температура снаружи
client.connect(server, 80);
Serial.println("********************************");
Serial.print("Byte sent to the AP: ");
Serial.println(client.print("Muie PSD\r")); //отправляем данные на esp8266
String answer = client.readStringUntil('\r');
Serial.println("From the AP: " + answer);
if(answer=="redOne"){
if (RedS==false){
digitalWrite(Red, HIGH);
RedS=true;
Serial.println("Red1 ON");
}
else{
digitalWrite(Red, LOW);
RedS=false;
Serial.println("Red1 OFF");
}
}
if(answer=="greenOne") {
if (GreenS==false){
Serial.println("Green1 ON");
GreenS=true;
digitalWrite(Green, HIGH);
}
else{
Serial.println("Green1 OFF");
GreenS=false;
digitalWrite(Green, LOW);
}
}
if(answer=="blueOne") {
if (BlueS==false){
Serial.println("Blue1 ON");
BlueS=true;
digitalWrite(Blue, HIGH);
}
else{
Serial.println("Blue1 OFF");
BlueS=false;
digitalWrite(Blue, LOW);
}
}
if(answer=="relayOne") {
if (Relay1S==false){
Serial.println("Relay1 ON");
Relay1S=true;
digitalWrite(Relay1, HIGH);
}
else{
Serial.println("Relay1 OFF");
Relay1S=false;
digitalWrite(Relay1, LOW);
}
}
if(answer=="relayTwo") {
if (Relay2S==false){
Serial.println("Relay2 ON");
Relay2S=true;
digitalWrite(Relay2, HIGH);
}
else{
Serial.println("Relay2 OFF");
Relay2S=false;
digitalWrite(Relay2, LOW);
}
if(answer=="AmbientTemp") {
if (AmbientTempS==false){
Serial.println("AmbientTemp ON");
AmbientTempS=true;
}
else{
Serial.println("AmbientTemp OFF");
AmbientTempS=false;
digitalWrite(Red, LOW);
digitalWrite(Green, LOW);
digitalWrite(Blue, LOW);
}
while(AmbientTempS==true){
Serial.println("Ambient temp is on!");
}
}
client.flush();
client.stop();
delay(2000);
}
}
- Не удается подключить мой ESP-12F к Wi-Fi с моим Arduino Uno
- Сторона сервера NodeMCU не может отправлять данные на сторону клиента — подключено несколько клиентов
- ESP8266 не подключается к Wi-Fi
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Можно ли отключить WiFi на ESP8266?
- Последовательная связь между ESP8266 и Arduino Uno
- Как отключить или остановить точку доступа в ESP8266?
- ESP8266 — действительно ли у него по умолчанию плохой радиус действия Wi-Fi?
начните с самого начала... уменьшите свой код до отправки одного байта или символа... когда это работает надежно, затем расширьте до нескольких байтов/символов... продолжайте добавлять код небольшими приращениями, @jsotola
Обязательно попробую, была аналогичная проблема, и в конце концов это сработало, я все же разместил вопрос, чтобы посмотреть, не сделал ли я какую-то очевидную ошибку, которую не уловил., @Ferferite