这是第二部分关于Esp8266在电脑端接入Onenet平台,并进行数据处理。以及Esp8266的一些用法。最大的目的就是为了之后自己在写Stm32的时候,直接拿这个做参考,这样会感觉很巴适。
Onenet部分(第一期):
https://blog.csdn.net/nja12/article/details/105648774.
Esp8266部分(第二期):
https://blog.csdn.net/nja12/article/details/105660222.
Stm32部分(第三期):
https://blog.csdn.net/nja12/article/details/105751015.
Stm32Wifi接收部分+++(第四期):
https://blog.csdn.net/nja12/article/details/105852408.
材料 | 注释 |
---|---|
Esp8266 | 型号选择 1(点1跳到注释) |
UsbtoEsp8266 | 两种用法2(点2跳到注释) |
Esp8266大家常见的其实就是AT固件,当然因为AT固件其实是比较老的,所以会有跟多更新的版本,甚至有些平台会用其他固件来完全代替AT。虽然那些固件其实还是按照AT来修改的。比如机智云的 GAgent 固件等。
At固件,GAgent固件和烧录包:
https://github.com/Basums/Csdn-resource-At.git.
首先Onenet平台咱们用的话AT固件就够了,之后咱们在Keil自己封装一下把这些东西给封装到咱们自己的库了就足够了。
那麽对于AT固件其实是对应AT指令集的。
常见的一些指令下面也罗列一下吧。
写着写着也一边测试着(感觉自己写这一段像个爬虫)
指令 | 返回值 | 注释 |
---|---|---|
AT | OK | ------ |
AT+RST | OK3 (点击3跳到注释) | 重启模块 |
选择WiFi应用模式:AT+CWMODE语法规则:
命令类型 | 语法 | 返回和说明 |
---|---|---|
设置命令 | AT+CWMODE = |
OK(此指令需重启后生效(AT+RST)) |
查询命令 | AT+CWMODE? | +CWMODE: |
测试命令 | AT+CWMODE? | +CWMODE: |
参数定义:(Csdn弄下面这个表格还要我用Html5差评啧啧啧)
参数 | 定义 | 取值 | 说明 |
---|---|---|---|
WiFi应用模式 | |||
1 | Station模式 | ||
2 | AP模式 | ||
3 | AP+Station模式 |
列出当前可用接入点:AT+CWLAP语法规则:(就是看看Wifi模块检测到附近有啥热点)
命令类型 | 语法 | 返回和说明 |
---|---|---|
执行命令 | AT+CWLAP | |
+CWLAP: |
||
此指令返回AP列表 |
参数 | 定义 | 取值 | 说明 |
---|---|---|---|
加密方式 | |||
0 | OPEN | ||
1 | WEP | ||
2 | WPA_PSK | ||
3 | WPA2_PSK | ||
4 | WPA_WPA2_PSK | ||
接入点名称 | 字符串参数 | ||
信号强度 | |||
连接模式 | |||
0 | 手动连接 | ||
1 | 自动连接 |
画风突变开始群爬:
加入接入点:AT+CWJAP语法规则:(这个就是Wifi模块加入路由器或者移动设备发出的热点)
退出接入点:AT+CWQAP语法规则:
设置AP模式下的参数:AT+CWSAP语法规则:
(⭐)
当然,因为这段是趴的,所以真诚的附上博主链接(奶鹅护体):
亲爱的某博主别举报我谢谢: 苍月代表我.
这个我真的搞了很久。当然也期盼着学学计算机通信网络就会了(然而并没有)
首先来看Esp8266的三种模式,以及配置方法,以及各自的操作(Pc上,单片机上的之后在说到单片机部分的时候再开始讲)
ESP8266模块通过路由器连接互联网,手机或电脑通过互联网实现对设备的远程控制。
要说具体扮演什么角色这里也有张参考例图:
分析:
很明显,这是一种Pc机提供局域网,其他部分就是单纯的客户端,简单来说就是,
Client:我连上你的热点了
Server:好的哥,您随便聊
那么怎么用呢?上面提到很多AT指令,那么咱们的用法是什么呢?
(昨天夜里没保存直接关电脑了&&&&败笔)
重新写一下:
STA模式:
即电脑采用AP模式
电脑开放一个热点
WiFi模块去连接我们的热点
AT+CWMODE=1
AT+CWJAP="jzc",'asd11asd'
wifi连接
AT+RST
AT+CIPSTATUS
电脑助手连接
AT+CIPSTART="TCP","电脑的地址",端口
(电脑TCPServer模式)
透传模式
AT+CIPMODE=1
AT+CIPSEND
都可以发
------------
+++退出
并不会断开连接
AT+CIFSE
AT+CIPSTATUS
AT+CIPCLOSE
ESP8266模块作为热点,实现手机或电脑直接与模块通信,实现局域网无线控制。
AT
AT+CWMODE=2
AT+CWSAP="JZC","123456789",4,3
AT+RST
AT+CIPMUX=1
连接WIFI热点
AT+CIPSERVER=1,8080
打开网络调试助手
电脑当客户端使用
WIFI做服务器
查WIFI模块IP
AT+CIFSR
连接
发送消息
AT+CIPSEND=0(ID),4(长度)
TCPClient 8080
两种模式的共存模式,即可以通过互联网控制可实现无缝切换,方便操作。
我们的需求其实并不是跟本地主机进行联系而是直接跟Onenet云主机联系~~~~
所以就算是Esp8266我们也依旧可以使用Post和Get方法
Post请求往往是为了我们能上传数据点:
根据网络调试助手的操作是这样的:
协议类型 | Tcp Client |
---|---|
服务器Ip地址 | 183.230.40.33 |
端口 | 80 |
发送数据格式 | 报文 |
报文格式:
POST /devices/592808742/datapoints?type=3 HTTP/1.1
api-key:Jl6WGd3z9Qmms0uGX7uGm=dq8jU=
Host:api.heclouds.com
Content-Length:60(别查错了)
{“datastreams”:[{“id”:“Online”,“datapoints”:[{“value”:0}]}]}
返回结果:
代表数据上传成功。
但是确实直接以数据流形式显示的:
所以可以改变上传内容
这样结果就是直接按照你的数据流里面进行更新。两种方法都有好处,也都有弊端。自己选择。
下面更换到Esp266:(STA模式就行)
操作步骤 | 返回 |
---|---|
AT | OK |
AT+CWMODE=1 | STA模式 |
AT+RST | 重载 |
AT+CWJAP="@K2",“PASSOWR” | 连接热点(只需要操作一次下次自动保存) |
AT+CIPMUX=0 | 设置成单路连接模式 |
AT+CIPSTART=“TCP”,“183.230.40.33”,80 | 连接TCP服务器(重启的时候从这里开始就好了) |
AT+CIPMODE=1 | 设置为透传模式 (如果错误多点一下) |
AT+CIPSEND | 启动透传发送 |
– | 下面是关闭的时候的操作 |
+++ | 退出透传模式,注意把发送新行勾掉 |
AT+CIPCLOSE | 断开连接 |
正在打开串口...
[12:42:37.791]发→◇AT
□
[12:42:37.795]收←◆AT
OK
[12:43:53.433]发→◇AT
□
[12:43:53.433]收←◆AT
OK
[12:43:55.001]发→◇AT+CWMODE=1
□
[12:43:55.005]收←◆AT+CWMODE=1
OK
[12:43:56.495]发→◇AT+RST
□
[12:43:56.499]收←◆AT+RST
OK
WIFI DISCONNECT
[12:43:56.599]收←◆
ets Jan 8 2013,rst cause:4, boot mode:(3,7)
wdt reset
load 0x40100000, len 1856, room 16
tail 0
chksum 0x63
load 0x3ffe8000, len 776, room 8
tail 0
chksum 0x02
load 0x3ffe8310, len 552, room 8
tail 0
chksum 0x79
csum 0x79
2nd boot version : 1.5
SPI Speed : 40MHz
SPI Mode : DOUT
SPI Flash Size & Map: 8Mbit(512KB+512KB)
jump to run user1 @ 1000
[12:43:56.699]收←◆\0
[12:43:56.723]收←◆屻?僴鞊{傮o|??弢{l勩{揹膌?d`你;?靌?$`屻s踠彏\0?dl sd徝sl尀銓bl宐r|廲x`靗鋌$s刲#潋'鐎no?宒鹥$?l剣???弆?l?o黒0臒銓#d烨p劅銓cd宐8{lsd
Ai-Thinker Technology Co. Ltd.
ready
[12:43:59.165]发→◇AT+CWJAP="Q2020","ai0406.0"
□
[12:43:59.173]收←◆AT+CWJAP="Q2020","ai0406.0"
WIFI DISCONNECT
[12:44:01.463]收←◆WIFI CONNECTED
[12:44:02.191]收←◆WIFI GOT IP
[12:44:04.173]收←◆
OK
[12:44:04.245]发→◇AT+CIPMUX=0
□
[12:44:04.253]收←◆AT+CIPMUX=0
OK
[12:44:06.755]发→◇AT+CIPSTART="TCP","183.230.40.33",80
□
[12:44:06.763]收←◆AT+CIPSTART="TCP","183.230.40.33",80
[12:44:06.811]收←◆CONNECT
OK
[12:44:10.178]发→◇AT+CIPMODE=1
□
[12:44:10.182]收←◆AT+CIPMODE=1
OK
[12:44:11.786]发→◇AT+CIPSEND
□
[12:44:11.790]收←◆AT+CIPSEND
OK
>
[12:44:43.703]发→◇POST /devices/592808742/datapoints?type=3 HTTP/1.1
api-key:Jl6WGd3z9Qmms0uGX7uGm=dq8jU=
Host:api.heclouds.com
Content-Length:20
{"Online":1;"Tec":0}
□
[12:44:43.775]收←◆HTTP/1.1 200 OK
Date: Sat, 25 Apr 2020 04:44:45 GMT
Content-Type: application/json
Content-Length: 26
Connection: keep-alive
Server: Apache-Coyote/1.1
Pragma: no-cache
{"errno":0,"error":"succ"}
撒花
查了好多资料终于搞成了啧啧啧!!!!!!!!!!!!
一直失败的原因:
后面有两个回车!!!
换一种语气:
GET [具体你要用那种方式]\r\n
api-key:你的APIKEY\r\n
Host:api.heclouds.com\r\n
Connection: close\r\n\r\n(⭐)
然后是上Esp8266:
跟Post前面的操作完全一样,所以可以简单Rst之后,直接开启透传模式
[13:21:52.820]发→◇AT+RST
□
[13:21:52.828]收←◆AT+RST
OK
WIFI DISCONNECT
[13:21:52.928]收←◆
ets Jan 8 2013,rst cause:4, boot mode:(3,7)
wdt reset
load 0x40100000, len 1856, room 16
tail 0
chksum 0x63
load 0x3ffe8000, len 776, room 8
tail 0
chksum 0x02
load 0x3ffe8310, len 552, room 8
tail 0
chksum 0x79
csum 0x79
2nd boot version : 1.5
SPI Speed : 40MHz
SPI Mode : DOUT
SPI Flash Size & Map: 8Mbit(512KB+512KB)
jump to run user1 @ 1000
[13:21:53.032]收←◆\0屻?僩溘s凔'|??莬sd屻r踠宒?l`屸s抣鋖?l`勩{揹菬\0?ld`;l噧{d劅隳cd腸{|莃p`?靋l{宒c禧o锢g'?刲騲l?$寧???嘾?$€'黒0専銊cl鋸8尀銊cl腸prd;l
Ai-Thinker Technology Co. Ltd.
ready
[13:21:55.409]收←◆WIFI CONNECTED
[13:21:56.021]收←◆WIFI GOT IP
[13:21:56.425]发→◇AT+CWJAP="Q2020","ai0406.0"
□
[13:21:56.433]收←◆AT+CWJAP="Q2020","ai0406.0"
WIFI DISCONNECT
[13:21:58.738]收←◆WIFI CONNECTED
[13:21:59.545]收←◆WIFI GOT IP
[13:22:01.431]收←◆
OK
[13:22:01.527]发→◇AT+CIPMUX=0
□
[13:22:01.536]收←◆AT+CIPMUX=0
OK
[13:22:03.809]发→◇AT+CIPSTART="TCP","183.230.40.33",80
□
[13:22:03.817]收←◆AT+CIPSTART="TCP","183.230.40.33",80
[13:22:03.858]收←◆CONNECT
OK
[13:22:06.157]发→◇AT+CIPMODE=1
□
[13:22:06.165]收←◆AT+CIPMODE=1
OK
[13:22:07.914]发→◇AT+CIPSEND
□
[13:22:07.918]收←◆AT+CIPSEND
OK
>
[13:22:15.824]发→◇GET /devices/592808742/datastreams/Online HTTP/1.1
api-key: Jl6WGd3z9Qmms0uGX7uGm=dq8jU=
Host: api.heclouds.com
Connection: close
□
[13:22:15.899]收←◆HTTP/1.1 200 OK
Date: Sat, 25 Apr 2020 05:22:17 GMT
Content-Type: application/json
Content-Length: 190
Connection: close
Server: Apache-Coyote/1.1
Pragma: no-cache
{"errno":0,"data":{"unit":"bool","create_time":"2020-04-21 15:32:05","unit_symbol":"bool","update_at":"2020-04-25 12:44:45","id":"Online","tags":["mobile"],"current_value":1},"error":"succ"}
(单片机的时候可以直接按照定时器的间隔进行Post和操作,然后进行数据解析。)
第二期大概结束了。下面开始上板子。
关于Esp8266的型号选择,真的很多。网上的资料也比较复杂。我之前找过一些放在云服务器但是域名被收回,服务器也被回收了咳咳咳,全给我解析掉了。但是Github也是一个好地方:
Esp8266资料: https://github.com/Basums/Csdn-resource-Esp8266.git/. ↩︎
一开始其实没太在意,以为就是8对8插进去就完事了。不过之前用机智云烧录固件的时候知道了这几个道道。其实像这种转接口的目的其实还是为Esp服务的,根据Esp用法的转接口的连接上也分两类。具体关于这部分的资料其他Csdn有比较详细的说明,可以自行查阅。我这里主要提两点我看到比较好的解释。
第一点: 像这转接口建议直接买两个,用焊枪把第二个根据需要做修改就可以很容易把它改装成一个烧固件的转接口。
第二点: 烧固件千万不能中途停止,否则会很尴尬。
第三点: 可以买点公对母和姆对姆的杜邦线,否则有时候会严重影响做下去的心情。 ↩︎
当然大家看到是实际效果并不只是OK,还会有很多。像Esp8266这种东西往往配置一次基础在之后就不需要重新配置。而AT+RST这个往往就是重启一下,大家可以自己尝试尝试看看其他模块之前的设置是不是在重启之后被改变了。 ↩︎