Arduino Uno R3通过ESP-01S连接网络

一、材料准备

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)引脚的线

c 复制代码
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接入物联网平台。

相关推荐
AORO_BEIDOU1 小时前
遨游科普:三防平板是什么?有什么功能?
网络·5g·安全·智能手机·电脑·信息与通信
比奥利奥还傲.1 小时前
如何利用内网穿透实现Cursor对私有化部署大模型的跨网络访问实践
网络
tyatyatya2 小时前
MATLAB中进行深度学习网络训练的模型评估步骤
网络·深度学习·matlab
Johny_Zhao2 小时前
Vmware workstation安装部署微软WSUS服务应用系统
网络·人工智能·网络安全·信息安全·云计算·系统运维·wsus
眠りたいです3 小时前
从数据包到可靠性:UDP/TCP协议的工作原理分析
linux·网络·网络协议·tcp/ip·udp·传输层
每次的天空3 小时前
Android第三次面试总结之网络篇补充
android·网络·面试
shykevin9 小时前
python开发Streamable HTTP MCP应用
开发语言·网络·python·网络协议·http
tmacfrank10 小时前
网络编程中的直接内存与零拷贝
java·linux·网络
数据与人工智能律师12 小时前
虚拟主播肖像权保护,数字时代的法律博弈
大数据·网络·人工智能·算法·区块链
purrrew13 小时前
【Java ee初阶】HTTP(2)
网络·网络协议·http