admin管理员组

文章数量:1591454

目录

    • 一 概要
    • 二 我们要做什么
      • 2.1 获得一个可用云主机
      • 2.2 在云主机上建立tcp server
      • 2.3 操作esp8266连接到服务器
    • 三 总结

一 概要

接触过一些物联网云平台,如阿里云、华为云、腾讯云、机智云等,要想使一个嵌入式设备接入物联网平台,一般需要一下几个步骤:
1.通过2G、4G、NB-IOT、WIFI等手段让你的嵌入式设备能接入公网;
2.将物联网云平台生成的设备密钥写入嵌入式设备,其中,这个密钥相当于设备唯一ID;
3.在云平台创建“数据节点”、“控制节点”等。
4.移植云平台的SDK程序到你的嵌入式设备。
以上2、3、4步确实能通过云平台现有的功能来极大的提高设备接入物联网的效率。但想真正理解物联网、云平台,还需要自己研究、或者说猜测一下其运作原理,从而从一定程度上搭建一个自己的物联网云平台。
以我的理解,物联网云平台的运作大概是这样的:平台其实是一个公网ip,平台商家在这个公网ip上建立tcp服务器(server),我们的设备即是一个个的tcp client,通过公网来连接平台服务器,实现数据交互,从而实现各种数据通讯、控制。当然,在这个服务器上加入数据库,就实现了多个设备的绑定,即通过平台生成的密钥来绑定;加入数据库,也实现了历史数据的保存,以及查询;在这个服务器上加入一些IT技术,就生成了可方便配置的“数据节点”,以及可方便配置的web页面。同时,有些云平台还支持手机绑定嵌入式设备,从而实现在手机上远程与设备进行交互,其实分析一下,手机也是作为一个client连接到了云平台服务器,只是在与设备交互时,中间隔了一个服务器,服务器只要知道手机绑定的是那个ID的设备就可以实现手机、设备之间的数据转发了。
总而言之,只要我们搭建好了这个tcp server,保证嵌入式设备可以连接上,之后就可以做更伟大的事了,比如各大云平台做的物联网云平台。

二 我们要做什么

一顿理论分析之后,我们就开始试着打通这个物联网通道吧。通过阅读这篇文章,我们可以搭建一个物联网平台的最最基础的地基,之后更伟大的工作便可由大家任意发挥。
通过此文,我们将了解:
1.云服务器的申请、设置;
2.掌握FileZilla的远程文件传输;
3.esp8266 wifi模块的上网;
4.云服务器的基本程序编写。

2.1 获得一个可用云主机

这里再次白嫖腾讯云的30天免费试用的轻量应用服务器,从这里get【腾讯云-轻量应用服务器试用】,申请的时候要选择云主机内安装的操作系统,我这里选择是linux系统的ubuntu,因为对它比较熟了。等待云主机建立并开机后,我们就可以在控制台中看到我们的公网IP了。在window下按win+r,输入cmd进入命令行,ping一下这个IP,是可以ping得通的,那么我们就可以在这个ip上建立tcp服务器,从而实现tcp通讯了。

尝试登陆一下,就通过web端的SSH远程登入了我们的云主机,又是熟悉的命令行。

2.2 在云主机上建立tcp server

这里还是使用我之前写的tcp server例程,扛住了5000个clinet的并发测试。【tcp server传送门】。一共包含三个文件——server.c server.h Makefile。其主要内容是为每个client建立一个线程用于业务交互,从client收到什么就返回什么到client。当我开开心心的将源码复制、粘贴到云主机时,问题出现了,通过腾讯云的这个命令行粘贴时,总是出现一些莫名奇妙的符号,导致编译不通过。因此需要通过其他方法来实现了。这里我们用到大名鼎鼎的FileZilla来将windows下的三个文件远程扔到云主机里。
打开FileZilla后建立新站点,协议选择SFTP,主机填入你云主机的公网IP,然后输入linux的用户名、密码,即可连接到云主机。

其中,ubuntu系统下的用户名就是ubuntu,这个腾讯云里有介绍,密码可以通过下图进行重置。

连接成功后,FileZilla将列出本地文件和远程主机的文件列表。

我们通过FileZilla将server.c server.h Makefile传到远程云主机后,因为我们是用ubuntu这个用户登陆的,而腾讯云的远程登陆默认使用的是Lighthouse用户,因此我们还需要在linux下切换用户:

su ubuntu
输入密码即可

之后我们来到存放服务器源码的目录,make一下,就生成了可执行的tcp_server.

如果在make时提示错误,是因为腾讯云的linux默认没有安装完整的gcc编译库,输入一下命令安装后重试即可:

sudo apt-get install build-enssential

另外,由于程序里打开的时8888端口,这个端口在腾讯云的防火墙里默认没有打开,还需要我们手动开启一下,否则无法监听套接字。

至此,我们运行一下tcp_server,服务器就建立了,程序开始监听有无客户端接入。

2.3 操作esp8266连接到服务器

使用AT指令操作esp8266,具体指令详见官方AT指令集。这里我们直接开启透传模式。

1. 配置 WiFi 模式
AT+CWMODE=3	
2.连接路由器
AT+CWJAP="SSID","password"	   SSID是你的wifi热点名称,后边是密码
这个wifi热点既可以是你家里的wifi路由器,也可以是手机创建的热点。
3.连接云主机服务器
AT+CIPSTART="TCP","xx.xx.xx.xx",8888
4.开启透传模式
AT+CIPMODE=1
5.发送数据
 AT+CIPSEND
 之后就开启透传了,通过串口向esp8266发送任意数据都会直接扔给服务器,同时服务器发给esp8266的数据也会直接通过串口接收。

我用的串口助手操作的esp8266,实验现象如下,发送this is a test后,收到了服务器原封返回的this is a test:

服务器端实验现象如下:

三 总结

由此,物联网平台最基础的部分算是打通了。设备端不仅限于使用esp8266 wifi模块的上网方式,4G、2G等模块,只要是能建立tcp连接的都可以。
只要打好了这个基础,即我们的服务器可以成功与客户端进行通讯,那我们就可以在服务器上施展拳脚了,主要是程序的编写。我们可以在服务器上编写数据库、编写业务逻辑,甚至编写web端,甚至可以利用Qt、c#等写服务器上位机,可视化的运行在云主机上,从而做任何你想做的事。这样,一个物联网云平台就随着你的想法而建立了。
比如,当你有一个这样的需求:你有一个温湿度采集模块,通过上述方法已经可以和云服务器通讯了,但是你还想在手机上方便的查看模块采集的温湿度。
你完全可以这样做:编写手机APP,同样的,手机APP也是一个client。连接至云服务器,通过通讯得知模块是否在线(模块上线后应该要通过协议告诉服务器“我上线了”),或者查看模块的历史温湿度。而当你有很多个模块时,每个模块就要配备一个唯一的ID,云服务器维护这个ID的模块的上线信息、数据通讯、数据存储等,而你的手机只需要通过ID绑定某个模块,便可以轻松地实现所谓的物联网。这个流程像极了阿里云、机智云等云平台的操作流程,但可以肯定的是,人家的协议更加规范、稳定,数据库更加健壮,开发更加方便。但又有什么能比得上自己搭建一个物联网平台而学到更多呢。

本文标签: 通道服务器