一、材料准备
Arduino Uno R3开发板 × 1
USB串口通信数据线(Uno开发板使用) × 1
ESP8266-01S Wi-Fi模块 × 1
ESP8266固件烧录下载器(烧录固件使用) × 1
WiFi无线收发转接板(适用于ESP-01S、ESP-01)
杜邦线 若干
二、烧录ESP-01S的AT固件
用到的资料链接链接:
https://pan.baidu.com/s/1zYrIcn_DDN5NJKM-Ql0-Ww
提取码:wifi
1、首先按照安装好串口驱动,版本老一点
2、将esp-01s插入固件烧录下载器,并插入电脑的USB接口
3、打开资料里面的flash_download_tools_v3.6.8
文件夹下的
4、从提供资料文件Ai-Thinker_ESP8266_AT_Firmware_DOUT_v1.5.4.1-a_20171130
中选择需要烧录的固件文件
5、按照如下图配置
6、烧录固件
下载成功后截图
如果提示串口连接失败,则使用资料里面提供的驱动软件,卸载驱动重新按照
7、打开资料里面的UartAssist.exe
串口调试助手进行测试
三、连接网络
1、设置工作模式
还是在串口调试助手中,通过指令AT+CWMODE=Mode
来设置工作模式;
Mode = 1,Station模式(客户端);在Station模式下,ESP-01S可以连接到现有的WiFi网络,充当设备的客户端,通过连接到WiFi网络,ESP-01S可以访问Internet,从而实现各种联网应用。
Mode = 2,AP模式(服务器、热点);在Access Point模式下,ESP-01S可以充当WiFi热点,允许其他WiFi设备连接到它,这种模式适用于创建一个独立的局域网络,使设备之间可以直接通信,而无需连接到外部网络。
Mode = 3, Station+AP模式(混合模式);这种模式结合了Station和Access Point两种模式,使ESP-01S既可以连接到现有WiFi网络,又可以充当WiFi热点,这使得ESP-01S可以在连接到外部网络的同时,为其他设备提供WiFi连接。
2、设置加入AP
AT+CWJAP=“SSID”,“PWD”
,返回ok则设置成功
SSID:连接wifi的id
PWD:连接wifi的密码
连接网络后,然后可以通过AT+CIFSR
查询本地IP地址
3、其他指令
查询当前的工作模式AT+CWMODE?
查询当前连接的的APAT+CWJAP?
查看当前无线路由器列表AT+CWLAP
复位指令(重启):AT+RST
设置波特率:AT+CIOBAUD=BaudRate
路由器分配给 ESP8266 的局域网 IP 以及网关地址和子网掩码:AT+CIPSTA?
四、TCP透传
1、首先需要建立一个TCP 服务器,需要借助资料包中的NetAssist.exe
网络调试助手 + 自己的电脑
打开网络调试助手,按照图片配置
2、利用串口助手将 ESP8266 连接到 TCP 服务器
通过AT+CIPSTART="协议模式","服务端IP地址",端口号
建立连接,成功返回CONNECT OK
3、这个时候,在输入框发送内容的话,依然是默认为指令。如果我们想把数据直接发送给 TCP 服务器,那么就需要开启透传模式。所谓的透传模式,可以视为 ESP8266 为透明状态,客户端发送的信息直接就传输给服务端。
发送AT+CIPMODE=1
,开启透传模式。
发送AT+CIPMODE?
,查询是否为透传
这时候通过网络调试助手可以向ESP-01S发送消息了,但是想通过ESP-01向网络调试助手发消息需要再发送AT+CIPSEND
发送AT+CIPSEND
,发送的任何数据,就直接传输到服务器了
退出透传:先发送 +++(不要带回车),再发送 AT+CIPMODE=0
。
断开 TCP 连接:AT+CWCLOSE
断开热点:AT+CWQAP
五、实现Arduino Uno R3与服务器的通信
通过三、四部我们实现了ESP-01S与服务器通信,接下来实现Arduino Uno R3通过ESP-01S与服务器通信
按照如图将Arduino Uno R3、ESP-01S、WiFi无线收发转接板连接起来
接线方式如下:
Arduino Uno R3 | WiFi无线收发转接板 |
---|---|
5V | VCC |
GND | GND |
0 | TX |
1 | RX |
打开Arduino编辑器,将下面代码烧录至Arduino Uno R3,烧录的时候拔掉0、1(RX,TX)引脚的线
void setup() {
Serial.begin(9600);
//while (!send_cmd("AT", "OK"));
//while (!send_cmd("AT+CWMODE=3", "OK")); //工作模式
//while (!send_cmd("AT+CWJAP=\"HUAWEI nova3\",\"1234567#%$\"", "OK")); //接入AP
while (!send_cmd("AT+CIPSTART=\"TCP\",\"192.168.1.180\",8080", "OK")); //接入服务器
while (!send_cmd("AT+CIPMODE=1", "OK")); //透传模式
while (!send_cmd("AT+CIPSEND", ">")); //开始发送
Serial.println("connect success"); //发送报文信息
}
void loop() {
if(Serial.available()>0)
{
char cmd = Serial.read();//读取蓝牙模块发送到串口的数据
Serial.print(cmd);
}
}
//boolean 成功返回true,失败返回false
boolean send_cmd(String data, char *keyword)
{
boolean result = false;
if (data != "") //对于tcp连接命令,直接等待第二次回复
{
Serial.println(data); //发送AT指令
}
if (data == "AT") //寻找esp8266是否正常工作
delay(1000);
else
while (!Serial.available()); // 等待wifi模块应答
delay(200);
if (Serial.find(keyword)) //返回关键词判断,比如ok
{
return true;
}
else
{
return false;
}
while (Serial.available()) Serial.read(); //清空串口缓存
delay(500);
}
结果如图:
程序是将服务发送给Arduino Uno R3的消息转发回服务器,因而结果如上,根据自己需求更改代码即可。
后续还会写文章,使用ESP-01S mqtt将Arduino Uno R3接入物联网平台。