ESP8266-01一些内容
系统有些指令必须特性状态下才可以执行,即先执行一些其它AT指令
1.设置station模式的IP信息
AT+CIPSTA="192.168.19.1","192.168.1.1","255.255.0.0"
设置后,使用AT+CWDHCP=2,1
恢复:DHCP方式
2.启动后服务器
AT+CIPMUX=1
AT+CIPSERVER=1,333 --后面是端口
3.启动UDP广播地址监听
AT+CIPMUX=1
AT+CIPSTART=0,"UDP","255.255.255.255",1111,2000,2
说明:1111任意端口(表示远程),2000为本地端口,
2(mode参数)表示以最后一次收到数据包IP为目标地址,也就是说如果有多个IP给本设备发送UDP包,那么AT+CIPSEND=0,x回复时数据发给最后一个发消息过来的
当采用mode=2时使用:AT+CIPSTATUS可以查看最后一发请求过来的的链接情况
4.启动UDP链接
AT+CIPSTART=0,"UDP","192.168.88.88",8080,2000,2
参数2与上面一样,比方192.168.88.11:8111,最后一个给设备发UPD包,那么设备回复时的目标设备就是192.168.88.11:8111了
5.退出透传模式
1.发送+++后面不要有回车换行
2.等一会
3.发送回车与换行
4.发送AT&回车换行看命令是否恢复
6.Arduino下进行测试

/* ESP-01 VCC -------- 3.3V GND -------- GND CH-PD -------- 3.3V (加不加10K电阻都可以) TXD ------ 10 // 软串口的RX RXD ------- 11 // 软串口的TX UNO的代码: */ #include <SoftwareSerial.h> SoftwareSerial mySerial(10, 11); // RX, TX void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } Serial.println("Goodnight moon!"); // set the data rate for the SoftwareSerial port mySerial.begin(9600); mySerial.println("Hello, world?"); } void loop() // run over and over { if (mySerial.available()) Serial.write(mySerial.read()); if (Serial.available()) mySerial.write(Serial.read()); }
7.启动后开启UDP透传模式,以及看门狗
服务端需要按$F...$E的格式封送数据

#include <avr/wdt.h> #include <SoftwareSerial.h> SoftwareSerial mySerial(10, 11); // RX, TX unsigned long lastSendTime=0; unsigned long lastReceiveTime=0; String RecCache=""; void setup() { pinMode(13,OUTPUT); digitalWrite(13,LOW); // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } Serial.println("Ready!"); // set the data rate for the SoftwareSerial port mySerial.begin(9600); mySerial.print("+++"); delay(100); mySerial.println("AT"); mySerial.println("AT+RST"); delayAndRead(3000); // while(!isGotIP()){ digitalWrite(13,HIGH); delay(300); digitalWrite(13,LOW); cls(); } mySerial.println("AT+CIPSTART=\"UDP\",\"122.226.151.4\",12462,2000,0"); delayAndRead(100); mySerial.println("AT+CIPMODE=1"); delayAndRead(100); mySerial.println("AT+CIPSEND"); delayAndRead(100); wdt_enable(WDTO_8S); } void loop() // run over and over { //handle user input cmd while (Serial.available()){ mySerial.write(Serial.read()); } while(mySerial.available()){ char c= mySerial.read(); RecCache=RecCache +(String)c; } int bIndex= RecCache.indexOf("$F"); if(bIndex>=0){ int eIndex=RecCache.indexOf("$E",bIndex); if(eIndex>=0){ //Extra Data String data=RecCache.substring(bIndex+2,eIndex); RecCache=RecCache.substring(eIndex); lastReceiveTime=millis(); handleData(data); } }else{ RecCache=""; } if(RecCache.length()>=1024)RecCache=""; //check watchdog if((millis()-lastReceiveTime)<30000){ wdt_reset(); } //heart beat if((millis()-lastSendTime)>=10000){ mySerial.println(millis()); lastSendTime=millis(); } } void handleData(String data){ Serial.println(data); } void cls(){ while(mySerial.available()){ mySerial.read(); } } void delayAndRead(int waitTime){ delay(waitTime); while(mySerial.available()){ Serial.write(mySerial.read()); } } boolean isGotIP(){ mySerial.println("AT+CIPSTATUS"); delay(100); if( mySerial.find("STATUS:2")){ return true; } return false; }
UDP服务端代码

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Threading; namespace SmartPivot.WinClient { public partial class Form1 : Form { private UdpClient udpServer = null; private bool isRunning = false; private bool Enable = false; private SynchronizationContext SyncCtx = null; public Form1() { InitializeComponent(); SyncCtx = SynchronizationContext.Current; btnSend.Enabled = false; } private void btnSwitch_Click(object sender, EventArgs e) { try { if (isRunning) { btnSend.Enabled = false; _Stop(); } else { ThreadPool.QueueUserWorkItem(o => { _Start(); }, null); btnSend.Enabled = true; } } catch (Exception ex) { } } private void _Stop() { Enable = false; if (udpServer != null) { try { udpServer.Close(); } catch { } } isRunning = false; this.Text = "已停止"; } private void _Start() { if (isRunning) return; Enable = true; //设置标题 SyncCtx.Post(o => { this.Text = "运行中"; }, null); var ipAddress = IPAddress.Parse(txtIP.Text); int port = int.Parse(txtPort.Text); // udpServer.Client.Bind(new IPEndPoint(ipAddress, port)); // udpServer.Connect(new IPEndPoint(ipAddress, port)); udpServer = new UdpClient(new IPEndPoint(ipAddress, port)); udpServer.AllowNatTraversal(false); var remote = new IPEndPoint(0, 0); isRunning = true; while (Enable) { try { byte[] receiveData = udpServer.Receive(ref remote); var str = Encoding.ASCII.GetString(receiveData); Console.WriteLine(string.Format("Remote,{0}:{1},[{2}]", remote.Address.ToString(), remote.Port, DateTime.Now)); Console.WriteLine(str); var responseTmp = String.Format("{0},{1},{2}" , remote.ToString(), DateTime.Now.ToString("yyMMddHHmmss"), Guid.NewGuid().ToString()); var responseDate = Encoding.ASCII.GetBytes("$F" + responseTmp.Length + ":" + responseTmp +"$E" + Environment.NewLine); udpServer.Send(responseDate, responseDate.Length, remote); SyncCtx.Post(o => { txtRIP.Text = remote.Address.ToString(); txtRPort.Text = remote.Port.ToString(); }, null); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } private void Form1_Load(object sender, EventArgs e) { var ip = Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(ent => ent.AddressFamily == AddressFamily.InterNetwork); txtIP.Text = ip == null ? "" : ip.ToString(); txtPort.Text = "12462"; } private void btnSend_Click(object sender, EventArgs e) { try { if (udpServer == null) return; var sendData=Encoding.ASCII.GetBytes(txtSend.Text); var ipAddress = IPAddress.Parse(txtRIP.Text); int port = int.Parse(txtRPort.Text); udpServer.Send(sendData, sendData.Length, new IPEndPoint(ipAddress, port)); } catch (Exception ex) { Console.WriteLine("Send Err:" + ex.Message); } } } }
8.设置AP名称
AT+CWSAP="DF21_LSC","12345678",5,3
其中5表示通道,3表示WPA2_PSK
密码需要8位以上
9.设置波特率
默认是115200
mySerial.println("AT+CIOBAUD=9600");
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
2013-11-05 .net二纬码标签打印
2010-11-05 Exception Handling Application Block (5)详细解
2008-11-05 Discuz!NT用户在线功能.