系统有些指令必须特性状态下才可以执行,即先执行一些其它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(, ); // RX, TX void setup()
{
// Open serial communications and wait for port to open:
Serial.begin();
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();
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(, ); // RX, TX
unsigned long lastSendTime=;
unsigned long lastReceiveTime=;
String RecCache=""; void setup()
{
pinMode(,OUTPUT);
digitalWrite(,LOW); // Open serial communications and wait for port to open:
Serial.begin();
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(); mySerial.print("+++");
delay();
mySerial.println("AT"); mySerial.println("AT+RST");
delayAndRead(); //
while(!isGotIP()){
digitalWrite(,HIGH);
delay();
digitalWrite(,LOW);
cls();
}
mySerial.println("AT+CIPSTART=\"UDP\",\"122.226.151.4\",12462,2000,0");
delayAndRead();
mySerial.println("AT+CIPMODE=1");
delayAndRead();
mySerial.println("AT+CIPSEND");
delayAndRead(); 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>=){
int eIndex=RecCache.indexOf("$E",bIndex);
if(eIndex>=){
//Extra Data
String data=RecCache.substring(bIndex+,eIndex);
RecCache=RecCache.substring(eIndex);
lastReceiveTime=millis(); handleData(data);
}
}else{
RecCache="";
} if(RecCache.length()>=)RecCache=""; //check watchdog
if((millis()-lastReceiveTime)<){
wdt_reset();
} //heart beat
if((millis()-lastSendTime)>=){
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(); 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(, );
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 = "";
} 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");

ESP8266-01一些内容的更多相关文章

  1. 分析NTFS文件系统得到特定文件的内容

    找某一个文件的内容(如要读取文件D:\dir\dir2\text.txt,详细过程例如以下: (1)读取分区表/分区链表信息,找到磁盘F的起始扇区. (2)读取D盘的第一个扇区(分区的BOOTSETO ...

  2. day10 内容大纲

    01 去年内容回顾 01 去年内容回顾 *args **kwargs: 万能参数,动态参数 * 魔性用法: 函数的定义时,* ** 聚合. 函数的执行时,* ** 打散. 形参顺序: 位置参数,*ar ...

  3. ESP8266开发环境、编译、烧录

    官方地址 中:http://www.espressif.com/zh-hans/support/download/overview?keys=&field_type_tid[]=14 英:ht ...

  4. 01.JS语法规范、变量与常量

    前言:    学习一门编程语言的基本步骤   (01)了解背景知识  (02)搭建开发环境  (03)语法规范  (04)常量和变量 2.JS的开发环境 (1)浏览器自带的JS解释器(js引擎) (2 ...

  5. linux 系统内核空间与用户空间通信的实现与分析<转>

    linux 系统内核空间与用户空间通信的实现与分析 2 评论: 陈鑫 (chen.shin@hotmail.com), 自由软件爱好者, 南京邮电学院电子工程系 2004 年 7 月 01 日 内容 ...

  6. 通过RTMP play分析FLV格式详解

    最近做了一个rtmp中转服务程序,通过实践,熟悉rtmp play和push中各类格式,这里总结一下. 程序github地址: https://github.com/runner365/rtmp_re ...

  7. [[其他教程]] 2015年最新版iOS基础视频_最适合初学者入门

    主讲:孙庆虎类型:iOS 适合对象:初学者入门视频介绍:本视频是iOS学院精心录制的免费精华版iOS语言基础视频,该视频特点在于最大程度保证了知识点的完整性,按知识点进行视频录制,每个视频控制在20分 ...

  8. [转]架构蓝图--软件架构 "4+1" 视图模型

    架构蓝图--软件架构 "4+1" 视图模型 本文基于多个并发视图的使用情况来说明描述软件密集型系统架构的模型.使用多重视图允许独立地处理各"风险承担人":最终用 ...

  9. Yacc 与 Lex 快速入门

    Yacc 与 Lex 快速入门 Lex 与 Yacc 介绍 Lex 和 Yacc 是 UNIX 两个非常重要的.功能强大的工具.事实上,如果你熟练掌握 Lex 和 Yacc 的话,它们的强大功能使创建 ...

  10. 20160124.CCPP详解体系(0003天)

    程序片段(01):HelloCGI.c 内容概要:CGI_HelloWorld #include <stdio.h> //01.CGI程序的编写规范 // (1).HTML文本格式声明后面 ...

随机推荐

  1. xe fmx 怎么改变button颜色

    xe fmx 怎么改变button颜色 改变照相机的默认像素CameraComponent1

  2. Redis基本操作-list

    Redis的5种数据结构:string.list.hash.set和zset; Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 value 数 ...

  3. 更改maven下载jar的仓库为阿里云仓库

    修改settings.xml <!-- 配置本地maven的仓库 --> <localRepository>D:\file\path\maven\repository</ ...

  4. Gulp的安装与配置

    http://blog.csdn.net/itlsx/article/details/49981459

  5. avalon做的抽奖效果

    .sweepstake { color: orange; font-size: 24px; font-weight: bold; } 先来一个简单的 <style> .sweepstake ...

  6. 团队作业4 Alpha冲刺

    第一天 日期:2018/6/13 1.今日完成任务情况以及遇到的问题 许征航:实现了推荐算法的基础逻辑,并按照模块化的思想对算法进行了分步整理. 遇到的问题:现有条件无法实现协同过滤算法,需要简化模型 ...

  7. Linux Shell中有三种引号的用法

    Linux Shell中有三种引号,分别为双引号(" ").单引号(' ')以及反引号(` `). 其中双引号对字符串中出现的$.''.`和\进行替换:单引号不进行替换,将字符串中 ...

  8. Spring依赖注入:注解注入

    注解注入顾名思义就是通过注解来实现注入, Spring和注入相关的常见注解有Autowired.Resource.Qualifier.Service.Controller.Repository.Com ...

  9. 表单跳转到Struts2

    在使用表单跳转到Struts2时,路径一直不正确. login.html如下: <form action="login.do" method=post> 账号:< ...

  10. MySql频繁查询、插入数据

    当我们需要频繁地从数据库查询.插入数据时,可以将这些数据库操作汇集写到同一个类里,作为工具类直接调用. 将数据库的具体信息保存在.properties文件中,用log4j作为日志记录 MySql.ja ...