小白能懂:嵌入式进阶:RTOS嵌入式系统框架
第一章 嵌入式常用裸机编程框架
第二章 面向对象编程基础
第三章 ESP8622物联网基础
第四章 STM32与ESP8266物联网编程
第五章 物联网编程优化
第六章 以OLED为例介绍RTOS面向对象编程
第七章 基于MQTT的智能家居程序框架
本节与本系列第三、四、五章联系较为紧密,建议一起观看,本节的主要内容是对前面的功能改进,不止在同一局域网中完成物联网的功能
文章目录
- **小白能懂:嵌入式进阶:RTOS嵌入式系统框架**
- 前言
- 一、网络基础知识
- 1.IP和端口
- 2. 公网IP与私网(局域网)IP
- 3. 如何访问私网设备
- 二、怎样传输协议
- 三 物联网程序设计
- 1.功能分析
- 2.程序分层
- 总结
前言
学习韦东山老师的七天物联网实战及直播课相关内容,以其课程笔记为骨,记录一下学习的过程,可能会加入一些自己的感想。
最后欢迎点赞、收藏与评论交流!
一、网络基础知识
1.IP和端口
数据传输的本质是从一个地址将数据拷贝保存到另一地址,常用的方式为memcpy(add1,add2,len),总结为网络数据的传输的三要素:数据源,目的,数据。
可以理解端口与app相关,当打开新的app或者重新打开APP的时候,端口号才会发生变化。
IP和端口表示源和目的的具体地址,同一电脑或者服务器的IP地址固定,但同一IP的不同的应用或者功能主要通过端口来区分。
2. 公网IP与私网(局域网)IP
公网IP是指在互联网中可见的IP,但我们日常生活中的设备太多了,为了减少公网IP的负担,引入私网IP,说的很模糊,其实就是在家的各种设备通过路由器来传输数据,此时路由器的IP就是公网IP,连接路由器的手机、电脑就是私网IP。
私网IP访问公网设备步骤和示意图如下所示:
- 主机A的局域网IP和端口号是10.1.1.100:1025,想要去访问公网211.100.7.34,由于它没有公网IP,多以只能求助于路由器
- 路由器把主机A数据包里的IP和端口号(10.1.1.100:1025)改成自己的IP和端口(162.105.176.65:16384),然后发出伪造的数据包
- 服务器收到后,将自己的数据返回给目的地址路由器(162.105.176.65:16384)
- 路由器根据自己伪造数据包的IP和端口进行查表162.105.176.65:16384,发现是主机A请求的数据,因此会将数据返回给主机A
- 主机A收到数据
但是借助路由器访问公网IP会导致公网设备无法访问路由器下的私网IP(连接路由器的手机、电脑、摄像头等),因为只有私网IP通过发起访问之后路由器才会分配给局域网设备相应的IP和端口;如果公网IP直接访问路由器里面的私网设备,路由器无法通过查表找到相应的私网设备
3. 如何访问私网设备
我们要实现在任意地方访问路由器下的私网设备(开发板,摄像头)必须添加服务器,通过手机外网控制家里的开发板。
如下图所示(手机192.168.0.2想要访问开发板设备192.168.0.2):
手机访问服务器将自己的数据发布出去,开发板再去访问该服务器可以将手机的数据取出来。
这样服务器里相当于有一个APP,将手机的数据(按约定的相应协议如MQTT)发布缓存下来,然后将其发送给相应订阅的开发板。
二、怎样传输协议
硬件上要有服务器。
软件上通过MQTT来实现,MQTT的框架如下所述:
内容的发布者进行发送,向服务器发布相应的内容;服务器进行数据的转播;订阅者在服务器上进行数据的订阅,当发现订阅的内容后即从服务器上进行内容的下载。
三 物联网程序设计
1.功能分析
F103端的主要工作包括通过串口连接服务器,发送数据,接收数据,控制相应的设备;
手机端的主要工作包括连接互联网,发送数据,接收数据,控制相应的设备。
2.程序分层
程序的分层结构如下所示:
首先是驱动层:本系列使用的硬件模块是ESP8266,需要写的是串口的相应驱动;AT指令的发送与处理;数据接收的处理;
同时我们的驱动层应该预留相应的接口方便以后其他硬件的接入与使用,比如USB-WIFI,或者其他的net_dev。
然后是MQTT的协议层:主要工作是构造data,用esp8622的函数进行发送;进行publish发送与subscribe订阅;
最后是APP层:进行数据处理,提供相应的函数。
总结
本节主要介绍了基于MQTT的智能家居程序框架。