Automation 使用ESP8266/Arduino Uno从服务器接收数据
我有一个树莓Pi作为WiFi热点工作,还有一个Arduino Uno试图使用ESP8266模块从中获取数据 这是我的Arduino接收器代码: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_引
#包括
#包括
#定义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) {