ESP8266透传接入中国移动OneNet

这块ESP8266买回来也放了挺久了,这两天突然想拿起来玩玩,简单的本地操作玩过之后,就想试试连接服务器,一开始是选择了阿里云的物联网平台,然后。。没搞出来。用了乐鑫原厂的DEMO,装linux虚拟机一套操作猛如虎,搞了两天之后倒是成功连上了平台,但是用不了AT指令,而且平台和模块之间一直疯传一堆东西,我也没看懂(笑。
然后被人推荐了移动的OneNet平台直接用透传接入。倒腾了一下午终于是成功连上了,中间遇到了许多问题,所以写上来和大家分享一下。
我一开始的配置是参考了这篇文章:中国移动OnetNet云平台 使用WIFI模块ESP8266 TCP透传模式传输数据流步骤
在此也是感谢作者。
下面是我的调试过程。

环境准备

  • 我使用了UartAssist串口调试助手,大家可以选用自己习惯的调试助手,应该都没什么问题。
  • 注册OneNet账号,创建产品,添加设备,具体方法可以参考官方平台提供的开发文档(这里很简单,一步一步来就行)

模块准备

我是刷入了安信可提供的AT固件。具体的方法不再赘述,可以参考安信可官网wiki:https://wiki.ai-thinker.com/esp8266

开始接入

下面是直接引用的 https://www.cnblogs.com/Mysterious/p/4816482.html?tdsourcetag=s_pctim_aiomsg 这篇文章的内容,为了读者阅读方便就直接贴在下面了。第一次写文章不知道怎么引用或者其他什么操作,如果有侵权或者其他问题请原作者或者管理员私信我。

发送指令顺序:

AT
这个指令要看到有AT OK说明你的供电和TTL和wifi模块通讯正常

AT+CWMODE=3
设置模式3,STA+AP,其实我们只用了STA

AT+RST
让模块复位,能在接收信息最下面看到 ready,说明模块复位成功。复位后就是STA+AP模式了

AT+CWJAP=“your ssid”,“password”
输入你无线路由器的用户名和密码,一定要写正确,注意大小写

AT+CIFSR
查询IP,因为有STA和AP两个模式,所以有两组MAC和IP,常见的是192.168.x.x局域网IP

AT+CIPMUX=0
设置单链接,透传只能在单连接模式下进行,所以在建立连接之前一定要用(AT+CIPMUX=0 设置单连接)

AT+CIPMODE=1
设置透传模式

AT+CIPSTART=“TCP”,“183.230.40.33”,80
连接OneNet服务器

AT+CIPSEND
启动透传发送

我按照原文章操作到这里没有任何问题,但是接下来的步骤会出错,无法正确连接到平台,以下是原内容:

POST /devices/79146/datapoints HTTP/1.1
api-key: pmWLtnkDBSreKfvg7GsClUXdXa4A
Host:api.heclouds.com
Connection:close
Content-Length:59

{"datastreams":[{"id":"TEMP","datapoints":[{"value":50}]}]}

发送JSON数据流,格式一定要正确,大多数人失败都是在这里格式不对

其中79146修改为你自己的设备ID

api-key后面的内容修改为自己的API-KEY

"TEMP"这个是我的数据流名称,修改为自己想要的

“value”后面的50就是数据,输入想要的。

然后回过头看下Content-Length:59

Connection:colse这一条如果加了,服务器接收到一次数据后会断开,如果不加可以连续发送数据。如果长时间不发送,也同样会关闭链接的。

这个59是后面的整个数据流的长度

一个小技巧,可以用Notepad++软件直接选中看这个长度是多少,别自己数,数错了就悲剧了!
ESP8266透传接入中国移动OneNet_第1张图片
这里困扰了我很久,我尝试用TCP助手连接平台,是没有问题的
最后的解决方案是,在串口调试助手中,所有应该输入回车的地方用\n代替,我一开始试过用shift+回车,但是没有用,串口助手只是在屏幕显示时完成了换行,这样传送给模块的代码就没有回车
所以修改后的代码是:

POST /devices/79146/datapoints HTTP/1.1\n
api-key: pmWLtnkDBSreKfvg7GsClUXdXa4A\nHost:api.heclouds.com\n
Connection:close\nContent-Length:59\n\n
{"datastreams":[{"id":"TEMP","datapoints":[{"value":50}]}]}

注意!!代码中的\n表示传输给模块的换行指令,然后为了阅读的方便,我用shift+回车将代码换行了
shift+回车只是在串口助手中显示换行,实际上并不会将换行指令传输给模块

成功后,模块返回数据如下:

{“errno”:0,“error”:“succ”}HTTP/1.1 200 OK Date: Tue, 04 Dec 2018
16:11:47 GMT Content-Type: application/json Content-Length: 26
Connection: keep-alive Server: Apache-Coyote/1.1 Pragma: no-cache

{“errno”:0,“error”:“succ”}

然后登陆自己的平台账户,设备数据那里就可以看到自己刚刚上传的数据了
ESP8266透传接入中国移动OneNet_第2张图片

至此,就完成了ESP8266模块通过透传与OneNet平台的通信。

尾记

使用AT指令加透传连接平台很方便,基于此可以将WIFI模块连接MCU,进而完成更复杂的操作。
我后期还是会尝试直接通过TCP协议连接阿里云平台,成功后也会写上来和大家分享,不过又懒又菜的我,做出来也不知道是什么时候了(笑。

你可能感兴趣的:(esp8266)