Automation 使用ESP8266/Arduino Uno从服务器接收数据

Automation 使用ESP8266/Arduino Uno从服务器接收数据,automation,arduino-uno,esp8266,arduino-esp8266,Automation,Arduino Uno,Esp8266,Arduino Esp8266,我有一个树莓Pi作为WiFi热点工作,还有一个Arduino Uno试图使用ESP8266模块从中获取数据 这是我的Arduino接收器代码: #包括 #包括 #定义sw_串行_rx_引脚4//将该引脚连接到esp8266上的TX #定义sw_serial_tx_引脚6//将该引脚连接到esp8266上的RX #定义esp8266_reset_引脚5//将此引脚连接到esp8266上的CH_PD,而不是复位。(让重置不连接) 软件串行swSerial(sw_串行_rx_引脚、sw_串行_tx_引

我有一个树莓Pi作为WiFi热点工作,还有一个Arduino Uno试图使用ESP8266模块从中获取数据

这是我的Arduino接收器代码:

#包括
#包括
#定义sw_串行_rx_引脚4//将该引脚连接到esp8266上的TX
#定义sw_serial_tx_引脚6//将该引脚连接到esp8266上的RX
#定义esp8266_reset_引脚5//将此引脚连接到esp8266上的CH_PD,而不是复位。(让重置不连接)
软件串行swSerial(sw_串行_rx_引脚、sw_串行_tx_引脚);
//最后一个参数设置ESP8266模块的本地回波选项。。
SerialESP8266wifi wifi(swSerial、swSerial、esp8266_reset_pin、Serial)//添加支持串行的本地回显和wifi调试
字符串输入字符串;
布尔stringComplete=false;
无符号长下一步=0;
无效设置(){
inputString.reserve(20);
swSerial.begin(9600);
Serial.begin(9600);
而(!串行)
;
Serial.println(“启动wifi”);
wifi.setTransportToTCP();//这也是默认设置
//wifi.setTransportToUDP();//连接到服务器时将使用UDP,默认为TCP
wifi.endSendWithNewline(true);//将使用换行符和回车键ie println结束所有传输。默认值为true
wifi.begin();
wifi.connectToAP(“RPi”、“覆盆子”);
wifi.connectToServer(“192.168.50.1”、“1234”);
发送(服务器,“ESP8266测试应用程序已启动”);
}
void循环(){
//确保esp8266已启动。。
如果(!wifi.isStart())
wifi.begin();
//将您在arduino控制台中键入的内容发送到服务器
静态字符buf[20];
如果(完成){
toCharArray(buf,sizeof buf);
wifi.send(服务器,buf);
inputString=“”;
stringComplete=false;
}
//偶尔发送一次ping。。
如果(毫秒()>下一步){
wifi.send(服务器“pingping…”);
nextPing=millis()+10000;
}
//侦听传入消息并回显,将等待收到消息,或最多6000毫秒。。
WifiMessage in=wifi.listenForIncomingMessage(6000);
if(in.hasData){
if(in.channel==服务器)
Serial.println(“来自服务器的消息:”);
其他的
Serial.println(“本地客户端的消息:”);
Serial.println(in.message);
//回音;
wifi.send(in.channel,“Echo:”,false);
wifi.send(in.channel,in.message);
nextPing=millis()+10000;
}
//如果要断开与服务器的连接,请使用:
//wifi.disconnectFromServer();
}
//监听控制台的串行输入
void serialEvent(){
while(Serial.available()){
char inChar=(char)Serial.read();
输入字符串+=英寸;
如果(英寸=='\n'){
stringComplete=true;
}
}
}
执行时,串行监视器显示:

好的,阿尔法C⸮C⸮J⸮H⸮AT+AWJAP=“RPi”、#树莓”无线网络断开无线网络连接 连接WIFI获得IP

在+CIFSR时正常

+CIFSR:STAIP,“192.168.50.13” +CIFQR:STAMAC,“2c:3a:eAT+CIPSTART=4”,TCP,“192.0n8.50.1”,121l

链接类型错误

Raspberry Pi的ISC DHCP服务器:

wlan0:STA 2c:3a:e8:4e:bf:70半径:开始记帐会话 5A3B2C85-000000E9 wlan0:STA 2c:3a:e8:4e:bf:70 WPA:成对键 握手完成(RSN)


我还提到了运气不佳。

一些假设,因为您没有提供信息:
Arduino IDE>=1.85
ESP8266社区包>=2.41

ESP模块ESP8266-12E带有最新的AT固件

如果是这种情况,并且这些片段(由X X括起)没有打字错误

+CIFQR:STAMAC,“2c:3a:eXAT+CIPSTART=4”,TCP,“192.0XnX8.50.1”,121l

这就需要检查以下几点

  • 硬件连接器-arduino和esp模块之间的串行连接器
  • ESP模块的稳定电源为3.3V
    当然,这是可以的-但只是以防万一,并作为其他读者的参考
  • 串行速度-尝试从9600增加到57600,甚至增加到115200波特
  • 这些代码应该在setup()中,而不是在循环()中

  • 代码处理
年底

可能导致通信中断
由于代码处理的原因,这可能会在不需要的点触发

//Make sure the esp8266 is started..
if (!wifi.isStarted())
wifi.begin();

//Send what you typed in the arduino console to the server
static char buf[20];
 nextPing = millis() + 10000;
 if (in.hasData) {