唯倚社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 572|回复: 2

[学习教程] ESP8266模块连接TLink云平台上传SIOT-DS18B20数据

[复制链接]

132

主题

300

帖子

3650

积分

LV3

Rank: 3Rank: 3

积分
3650

最佳新人

发表于 2017-10-24 00:39:30 | 显示全部楼层 |阅读模式

轻松玩转社区

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 MartinGarrix 于 2017-11-1 18:31 编辑

ESP8266连接T-link云上传SIOT-DS18B20数据
本教程配送ESP8266源码
主要目的及流程          背景目的
       针对于用户的提议与要求,希望本产品能够实现在外网上的控制,而不仅仅局限于内网。目前为止,我们向用户推出的教程指导与开发环境一直以TCP内网通信作为媒介,然而唯倚SIOT-1(DS18B20)  WIFI传感器作为一款学习和自行DIY的教学模块,产品本身就是能够建立外网通信的(需使用者自身对模块进行二次开发)。但是唯倚物联不止是为广大单片机爱好者开发者提供便捷通道的团队,更是以服务用户、创新产品为目的团队。在外网通信上,介于公司一直在研发最新外网方案,研发还处在中期阶段,架构上存在不稳定因素,目前还未推出以公司自身服务器为平台的外网连接系统。为满足广大用户的需求,本公司以此教程作为一个范例,教大家如何借助网络上已有的免费的云平台,来实现本产品的互联,搭建一个属于你的外网控制设备。这些云平台在一定需求范围内是有其优势的,且具有一定的稳定,一般情况下不会存在数据掉包情况。而在接下的示范中,我们选择的T-link这个平台,连接与使用上相对简单,用户也比较容易懂,方便用户二次开发。(本教程仅作为学习交流使用)

编译环境:ESP_IDE                  
编译语言:C                             
硬件模块:WIFI传感器 SIOT_1模块
通信方式:串口                         TCP
平台:T-link云平台
硬件淘宝链接:  
SIOT-1:   
https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4023-17173778559.10.36109b80PkqF1f&id=559742127126

平台使用流程
进入云平台官网,网址:http://www.tlink.io/index.htm

第1步注册一个账号

7%{VUSQXP`XT2N{%(C{OK1E.png

平台必须注册才能使用。


8GASP9[2CKR3(PPK0JNR[0H.png


第2步我们得添加设备


F0D72BV)26~BF[8I61ZV20L.png



第3步添加设备名称 -> 选择协议 -> 选择上传周期 -> 追加类型 -> 更换图标 -> 选择是否公开

B`1O8D6C[5W35J591`4_9KH.png
第4步 还是在第3步的界面下面   选择地区 -> 点击创建设备

Z@XF`[[2TJ(31P}VTBMLXXG.png

第5步 点击进入设备 点击设备连接

J[NNDM`NKG(W~R6}$C6V]QJ.png
我们可以看到我们的设备信息

]5~4B9N3RD5415IWYQ6I5X8.png
第6步定协议 定自定义协议标签

L)[]J@Y)OYEB1VIX8}FCV$B.png
协议数据头为W,数据长度是不限制的,数据结束符为E,一定记得保存!!!
第7步点击所有传感器 点击写入指令

8N771TKR[LB`MS%8$VJOVNL.png

FBPTG}B6$$A@TNZ({][QS7I.png


选择自定义格式,为W1E然后点击确认,确认之后所有协议已经定完
第8步在左边的黑色属性栏点击监控中心,进入监控中心
S@)RYGJMBJ7E49IYN)W@NK7.png
进入之后我们可以看到我们的设备是未连接的,且设备为灰色
K`]0J$ZMRM}@38J7%Z9D67W.png
第9步 我们进行TCP工具模拟设备连接云平台



我们用到的TCP助手软件名称为TCP&UDP测试工具
下载链接:http://pan.baidu.com/s/1geBjJer 密码:9mp5

TCP&UDP测试工具安装教程   http://bbs.weiecn.com/thread-377-1-1.html

先点击创建连接 选择类型为TCP 数据IP和端口号 选择随机 点击创建

L8FIK3ZEO]6$QEKG`DY7F$R.png

IP为:tcp.tlink.io端口号:8647注意格式别打错了,没有空格
依次点击连接


~RJ@RO]~SD4S]31WWzHOV.jpg

当连接上服务器之后我们的左边的图标会变成绿色,然后发送系列号连接设备
一定要点击这两个链接,确保连接,切记!!!



]O_RV)[LC5]D7IVAPXJ_8OL.png

复制序列号粘贴到TCP工具的发送区
注意序列号没有空格,注意格式,切记!!!



`3P2X1}(GUZC2)`()%%IVJJ.jpg


当设备连接上之后我们云平台的设备颜色变成了绿色,当前状态也变成了已连接。


TKXM5OZ6J(1PNT4M8{BQ2L0.png



发送W18E,云平台应该接收到温度为18℃

XWC(E4`}]_1GM26HUVUH81D.jpg


3A5L1T4$@]@~RSI2$QM7D56.png

到这里我们模拟设备结束
一定要保证你的设备已连接成功才能进行数据交互,切记!!!







这个温度值为一个数值,根据数据所发的大小决定,数值可以为整数负数 零,不限大小。
既然模拟通过了,那么下面我们将用代码实现。
代码实现
       首先我们得弄得一个流程,既然我们要连接云平台那么我们得模块必须是作为客户端,而且需要连接WiFi,意思是模块必须连接网络。那么我们还得做一个事情,那就是云平台服务器的IP地址不是固定的,只有端口号固定。那么我们需要对它进行解析,来获取我们的固定的服务器的IP地址,或许你会说我们解析一次然后把它的IP记下来固定下来,以后服务器的IP就是我们记下来的这个。这样认为肯定是错的,我们从DNS域名中解析出来的IP是会变的。在我们的ESP8266SDK编程手册中有一个函数举例,函数名espconn_gethostbyname。手册中举了一个例子。
       主要流程就是:先连接WiFi,在获取本地IP,获取完本地IP去解析DNS,获取到目标IP然后连接服务器。连接到服务器成功之后发送序列号连接设备,再与设备进行通信。
主要代码讲解
我们先将工程导入,导入工程流程我就不讲解了。我们进入工程之后先打开我们的user_main.c文件,找到我们WiFi连接函数user_set_station_config
配送的源程序,所有用户需要更改的程序都在app文件夹的user和driver下,切记!!!

8AP10P@_5SJSS8T}L4]ZCT8.png


[C] 纯文本查看 复制代码
void ICACHE_FLASH_ATTR
user_set_station_config(void)
{
char ssid[32] = "XXXXX";                                        //设置路由器WiFi名称
char password[64] = "XXXXXXX";                //设置WiFi密码
struct station_config stationConf;
stationConf.bssid_set = 0;
os_memcpy(&stationConf.ssid, ssid, 32);
os_memcpy(&stationConf.password, password, 64);
wifi_station_set_config(&stationConf);
}


连接的WiFi用户家里的WiFi,WiFi名称与密码都设为数字或者英文,最好不能出现因为,可能导致连接不上WiFi,连接不上就获取不到本地IP,后续的工作也开展不了。
切记WiFi名称和密码一定是自己路由器的 一定要正确!!!!!


J}[4UB829{4}SEFBV3}E3$K.png

这是我们的主函数,我们对各个模块进行了初始化,并对相应函数进行了调用。这里我们还注册了TCP连接函数。我们没有像WIOT那样进行对按键操作。于此同时我们初始化了DS18B20函数,这个函数里面我们开启了DS18B20的数据上传更新。后续我们再继续介绍这个函数。
现在我们来打开DNS.c文件,我们看看里面的函数。

323@O]32$SARU]RYHEH7{0J.png


[C] 纯文本查看 复制代码
void getipbydns(char *name,dns_found_callback found)
{
        ip_addr_t addr;
        user_tcp_conn.proto.tcp = &user_tcp;
        user_tcp_conn.type = ESPCONN_TCP;
        user_tcp_conn.state = ESPCONN_NONE;
        tcp_server_ip.addr = 0;
    espconn_gethostbyname(&user_tcp_conn,name, &addr, found); // DNS function
}

我们可以看到这个文件里面只有一个函数,函数名getipbydns,主要功能就是得到解析后的DNS,传进去的参数一个是域名DNS指针,另外一个是要执行的回调函数。
现在我们来看TCPClient.c文件这里我会着重介绍几个重要函数。

%U]8ID0I]B_VP$FFXG)F)Q1.png


[C] 纯文本查看 复制代码
LOCAL void ICACHE_FLASH_ATTR
user_dns_found(const char *name, ip_addr_t *ipaddr, void *arg)
{
    struct espconn *pespconn = (struct espconn *)arg;
  
    struct ip_addr ip;
    if (ipaddr == NULL) {
        os_printf("user_dns_found NULL \r\n");
        return ;
    }
    os_printf("user_dns_found %d.%d.%d.%d  \r\n",IP2STR(ipaddr));
    ip.addr=ipaddr->addr;
            struct ip_info info; //用于获取IP地址的信息
        wifi_get_ip_info(STATION_IF,&info);
        my_station_init(&ip,&info.ip,8647);
}


这个时查找DNS是否存在的回调函数,当检测到DNS存在时,去提取目标IP和端口号还有本地IP进行连接。

J97E$J~1J5[E7[L9RNSC]_V.png


[C] 纯文本查看 复制代码
void wifi_handle_even_cb(System_Event_t *evt)
{
  switch(evt->event)
  {
    case EVENT_STAMODE_GOT_IP:
                os_printf("IP->OK\n");                //获取IP成功
                HaveIP=true;
                reconnected=true;
                getipbydns("tcp.tlink.io",user_dns_found);
      break;
      default:
              os_printf("IP->ON\n");
              reconnected=false;
                HaveIP=false;
          break;
  }
}


这个函数只有当我们连接上WiFi之后我们就会获取到本地IP,当获取到本地IP之后我们就对目标域名DNS进行解析,从而获取到目标IP,并连接上服务器。

EF5@1{R1]{QI9MOLX)MEIU8.png

[C] 纯文本查看 复制代码
struct espconn *pespconn;
void ICACHE_FLASH_ATTR user_tcp_connect_cb(void *arg){
        pespconn = arg;
    espconn_regist_recvcb(pespconn,user_tcp_recv_cb);//注册接收数据的回调函数
    espconn_regist_sentcb(pespconn,user_tcp_sent_cb);//注册发送数据成功的回调函数
    SendTcpStr("0588QN61IXS4T71V");
    espconn_regist_disconcb(pespconn,user_tcp_discon_cb);//注册断开连接的回调函数
  
}

这是我们的TCP注册时间函数,当我们连接上TCP是我们给云平台发送设备序列号,发送完成之后我们就能连接上设备。这里的序列号一定是对应你的设备的序列号的,而且序列号具有唯一性。
注意序列号要跟你自己的设备上的序列号对上,切记!!!因为我创建了两次所以的图片上的序列号和代码块的可能存在不同,但是一定需要与你自己的设备相同!!!

12~SL8TD({0RXIPYS0J7P.png

这是我们的TCP底层配置连接函数。具体参考ESP8266编程手册,这里不做介绍。
现在我们打开DS18B20.c文件,

FJ1UH8L%U%%u2A4DHMKMS.png

我们可以看到DS18B20初始化函数里面启动了一个上传数据定时器任务,每3秒更新一次数据,同时我们还做了一个关闭上传函数。

F8O32Z(X6~MF[TR3)6XK$(H.png

这是我们的上传数据函数,将读到的数据进行处理之后送往串口和云平台进行显示。
其余的DS18B20驱动函数我们在此不做太多讲解,只要根据传感器的时序来,那就不会错。
记住一点不管你更改了任何东西,编译之前一定要保存全部。
到此我们的代码介绍完毕,我们对工程编译下载。
程序正常运行时我们可以打开云平台的监控中心查看数据的变化。



我们不需要对TCP进行接收,所以我们在此不做讲解。当程序正常运行,连接上设备后,我们可以通过云平台的监控中心查看传感器数据。至此我们实现了外网控制,只需你的手机有网络即可进行远程查看。
如果更改了代码,下载之前一定要全部保存,然后在进行编译,并且你下载时固件路径一定要正确,切记!!!
程序正常运行时
当我们连接上云平台服务器时,我们可以打开串口看到有相应数据发送上来。


[[W}_4Y}G8E22Z%XTWKWCTA.png


我们可以看到本地IP,DNS,网关。并且如果连上WiFi模块分配的本地IP,串口会接收到IP->OK指令,解析到云平台的IP为112.74.142.132.

注意用户下载的程序目录是带中文的,编译环境和下载烧录软件一定不能出现中文路径,所以当用户下载完成之后立马更改路径名称,改成英文或者数字
程序源码分享连接
链接:http://pan.baidu.com/s/1geFnuSV 密码:jlq9



5

主题

120

帖子

794

积分

版主

Rank: 7Rank: 7Rank: 7

积分
794
发表于 2017-10-25 23:29:35 | 显示全部楼层
666666
回复

使用道具 举报

132

主题

300

帖子

3650

积分

LV3

Rank: 3Rank: 3

积分
3650

最佳新人

 楼主| 发表于 2017-10-26 11:57:40 | 显示全部楼层
66666666666
[发帖际遇]: MartinGarrix 发帖时在路边捡到 4 E币,偷偷放进了口袋. 幸运榜 / 衰神榜
回复

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|weiecn ( 湘ICP备14002058号 )

GMT+8, 2018-6-19 23:46 , Processed in 0.089411 second(s), 10 queries , Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表