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(, ); // 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一些内容的更多相关文章
- 分析NTFS文件系统得到特定文件的内容
找某一个文件的内容(如要读取文件D:\dir\dir2\text.txt,详细过程例如以下: (1)读取分区表/分区链表信息,找到磁盘F的起始扇区. (2)读取D盘的第一个扇区(分区的BOOTSETO ...
- day10 内容大纲
01 去年内容回顾 01 去年内容回顾 *args **kwargs: 万能参数,动态参数 * 魔性用法: 函数的定义时,* ** 聚合. 函数的执行时,* ** 打散. 形参顺序: 位置参数,*ar ...
- ESP8266开发环境、编译、烧录
官方地址 中:http://www.espressif.com/zh-hans/support/download/overview?keys=&field_type_tid[]=14 英:ht ...
- 01.JS语法规范、变量与常量
前言: 学习一门编程语言的基本步骤 (01)了解背景知识 (02)搭建开发环境 (03)语法规范 (04)常量和变量 2.JS的开发环境 (1)浏览器自带的JS解释器(js引擎) (2 ...
- linux 系统内核空间与用户空间通信的实现与分析<转>
linux 系统内核空间与用户空间通信的实现与分析 2 评论: 陈鑫 (chen.shin@hotmail.com), 自由软件爱好者, 南京邮电学院电子工程系 2004 年 7 月 01 日 内容 ...
- 通过RTMP play分析FLV格式详解
最近做了一个rtmp中转服务程序,通过实践,熟悉rtmp play和push中各类格式,这里总结一下. 程序github地址: https://github.com/runner365/rtmp_re ...
- [[其他教程]] 2015年最新版iOS基础视频_最适合初学者入门
主讲:孙庆虎类型:iOS 适合对象:初学者入门视频介绍:本视频是iOS学院精心录制的免费精华版iOS语言基础视频,该视频特点在于最大程度保证了知识点的完整性,按知识点进行视频录制,每个视频控制在20分 ...
- [转]架构蓝图--软件架构 "4+1" 视图模型
架构蓝图--软件架构 "4+1" 视图模型 本文基于多个并发视图的使用情况来说明描述软件密集型系统架构的模型.使用多重视图允许独立地处理各"风险承担人":最终用 ...
- Yacc 与 Lex 快速入门
Yacc 与 Lex 快速入门 Lex 与 Yacc 介绍 Lex 和 Yacc 是 UNIX 两个非常重要的.功能强大的工具.事实上,如果你熟练掌握 Lex 和 Yacc 的话,它们的强大功能使创建 ...
- 20160124.CCPP详解体系(0003天)
程序片段(01):HelloCGI.c 内容概要:CGI_HelloWorld #include <stdio.h> //01.CGI程序的编写规范 // (1).HTML文本格式声明后面 ...
随机推荐
- 简单的socket_server 和 socket_client(实现文件的上传功能)
socket_server 客户端程序 import socket, os, json class Ftcplient(object): def __init__(self): "" ...
- Mysql 索引优化 - 2
永远小表驱动大表(小数据驱动大数据) in exists区别, SELECT * FROM A WHERE A.id in (SELECT id FORM B) 若A表数据大于B表数据用in SELE ...
- jboss 异常处理
异常: jboss.aop:service=AspectManager 15:19:46,361 ERROR [ScannerThread] [MainDeployer] org.jboss.depl ...
- tnsping 命令解析
C:\Users\nowhill>tnsping jljcz Oracle Net 工具(命令)tnsping,是一个OSI会话层的工具,它用来: 1)验证名字解析(name resolutio ...
- AWK用法整理
printf "1:2::3:::4::::5" | awk -F '[:]+' '{print $4}' [:]+ 表示以1个或多个 :(冒号)作为分隔符 ip addr | ...
- deb软件包安装和卸载
deb包是debian,ubuntu等LINUX发行版的软件安装包,是类似于rpm的软件包,而非debian,ubuntu系统不推荐使用deb软件包,因为要解决软件包依赖问题,安装也比较麻烦. 1.一 ...
- tbytes 转 十六进制 string
function Bytes2HexStr(buf: TBytes; len: Integer): AnsiString; begin SetLength(Result, len*2); BinT ...
- 吴裕雄 实战PYTHON编程(9)
import cv2 cv2.namedWindow("ShowImage1")cv2.namedWindow("ShowImage2")image1 = cv ...
- Beta分布(转)
背景 在Machine Learning中,有一个很常见的概率分布叫做Beta Distribution: 同时,你可能也见过Dirichelet Distribution: 那么Beta Distr ...
- centos7部署cacti
一.centos部署cacti 1. 关闭selinux. 2.fabric一键部署lamp 3. 设置mysql密码123456 1 mysql_secure_installation 4. 安装s ...