esp8266模块功能大乱炖

esp8266模块功能大乱炖

esp8266引脚说明

淘宝上比较常见的wifi模块了
由上图可以看出有8个引脚,esp8266使用的是串口通信。那么我们实际用到的就只有GND,3V3,TX,RX,EN,RST这么三个引脚。分别接单片机的GND,3V3,串口的RX,串口的TX,至于EN和RST这个可以用两个GPIO,主要是实现esp8266的使能与复位。
esp8266分为三种模式:一种是station(客户端模式,相当于esp8266连接热点);一种是AP(服务器模式,相当于esp8266作为热点给别的设备连接);还有一种就是前面两种的合体啦。

实验步骤

步骤一:首先初始化两个串口,一个是用来接esp8266的,一个是用来打印esp8266返回到的数据,便于查看初始化是否成果。
步骤二:AT指令的发送。

想想这个模块其实也挺简单的,我们可以通过socket编程,向esp8266发送数据实现控制的目的(手机app控制);通过向知心天气网获取某地的天气数据同步到本地;将本地温湿度模块采集到的数据同步到onenet云平台。话不多说,上菜。

电脑连接esp8266(服务器模式)

用到的AT命令:
AT+CWMODE=2 设置为AP模式,即热点模式
AT+CIPMUX=1 设置多连接模式
AT+CIPSERVER=1,8080 建立服务器,端口设置为8080(这个端口可以随便配置,但是手机连接端口也要是这个)
AT+CIPSEND=0,10 发送数据命令(0是通道号,10是数据长度)
》连接esp8266的串口发送要发送的数据

电脑连接esp8266(客户端模式)

AT+CWMODE=1 设置为station 模式
AT+CWJAP=”AndroidAPA899”,”flaz0881” 连接wifi
AT+CIFSR 查看ip地址
AT+CIPMUX=0 设置单连接
AT+CIPSTART=”TCP”,”116.62.81.138”,80 连接电脑,”116.62.81.138”为电脑本地ip地址,80是端口号(改成自己的)
AT+CIPSEND=10 发送多少位的数据
》发送要发送的数据

注:客户端模式下esp8266和电脑要连接同一个热点,保证两者在同一个网段下。
注:大家应该也注意到了,不管是电脑连接esp8266(服务器)还是电脑连接esp8266(客户端模式)都只能是在同一个局域网下通信。那 么有没有办法是跨局域网通信的呢?当然有办法,要么我们要有一个公网ip的云服务器,通过将两台设备连接到这台云服务器,这台云服务器就相当于一个中转站,购买大概需要¥300;要么就可以连接路由器,因为每一台路由器都是有一个公网ip的,一台设备连接路由器,另一台设备在天南地北连接这个路由器的某个端口,再在路由器里边设置,这样子就可以实现跨局域网通信啦,具体我们可以看看这位老哥写的文章,很棒。
跨局域网通信

本地数据上传到onenet平台

用到的AT命令:
AT+CWMODE=3 配置成 AP+STA模式(配置为1也可以,都是连接wifi)
AT+RST 重启生效
AT+CIFSR 查询esp8266的IP
AT+CWJAP=”AndroidAPA899”,”flaz0881” 连接外部热点,”AndroidAPA899”热点名,”flaz0881” 热点密码(改成自己的)
AT+CIPSTART=“TCP”,“183.230.40.40”,1811 连接onenet服务器
AT+CIPMODE=1 开启透传模式
AT+CIPSEND 开始透传(开启透传之后,即使我们再发送AT指令,都只是字符串而已,不能执行)
》发送“产品ID#鉴权信息#脚本名称”登录报文,让onenet知道我们要向他发送数据了
》发送具体的数据
数据上传到onenet

注:上传数据后可以通过图形界面显示出来
onenet图形界面显示

从知心天气网获取数据

用到的AT指令为
AT+CWMODE=1 wifi模式设置为station模式,即wifi模块连热点
AT+RST 复位,在这里要去掉,因为不去掉后面返回知心网站的数据只返回一部分
AT+CIPMUX=0 设置为单链接模式
AT+CWJAP=“AndroidAPA899”,“flaz0881” 连接热点
AT+CIPSTART=“TCP”,“api.seniverse.com”,80 连接知心网站的服务器
AT+CIPMODE=1 设置为透传模式
AT+CIPSEND 发送数据命令
》发送知心网能识别的命令(“GET https://api…zh-Hans&unit=c\r\n\r\n”)
接下来就交给知心天气网啦,它会放回cjson格式的数据。
知心天气网获取数据

注:你以为这就完啦?不,这还没有,天气网放回的数据是cjson格式的,我们要把它简化,截取里边的某部分数据,像温度啊,湿度啊,风速啊。。。也许你会用一个数组保存返回的数据,再用C语言的截取函数strtok()来截取想要的那部分,那么恭喜你可以少走点弯路了,这个方法我已经试过了,行不通。呜呜呜!我们要用专用的cjson解析库来解析,具体使用可以参考下面这位老哥的文章。
cjson数据格式解析

那些莫名其妙的“坑”

问题一

当我们在做电脑和esp8266通信时,esp8266可以正常连接热点,但是连接电脑的网络调试助手时却死活连不上,即使用
AT+CIPSTART=”TCP”,”116.62.81.138”,80 这条命令时,出现“ERROR CLOSED”。有很多博主说是防火墙还是什么的,可能有些有用,但是都没能解决我的问题,经过了冥思苦想,终于发现新大陆了。
网络调试助手
解决方法:我们在烧录代码之前就要打开网络调试助手,设置好ip地址和端口号,还有就是协议类型。如果你是在烧录完成之后再来打开那是不行的。为什么呢?当我们打开开启按键时,电脑就对我们设置的端口进行监听,要是没有在程序运行到那句连接电脑的指令前打开,就相当于电脑没有对该端口进行监听,当esp8266发起连接请求时,我电脑没有监听就不会做出允许连接的操作,这样子连接就失败了。

连接成功之后,我们可以按window-》cmd-》netstat -an,查看电脑端口的使用情况,可以看出电脑和esp8266已经连接在一起啦
电脑和esp8266成功连接

问题二

在进行json数据转字符串的过程中发现老是没办法获取想要的结果,经过反复实验,发现问题的所在,那就是利用cjson库来解析时,可以解析短的cjson数据,不能解析长的cjson数据。知道问题所在就离成功又近了一步,百度查,当然不会时官方库的问题,而是我们编译器的堆栈设置小了,把堆栈设置大一些就能够完美解决问题了。
增大堆栈空间

例程代码

esp8266实验代码(HAL)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值