Attention:只是自己简单的留个总结,记录一下
简单的结合一下在家里面搞个物联网挺实在的,开个灯了检测一下温湿度,ESP32-CAM也可以给家里安装个监控,家里有太阳能热水器可以改装一下自动上水什么的无非多找点传感器模块,如果觉得不方便也可以加一个语音模块什么的,总之拿来初学是没有问题的。当然这里面还有很多优化的问题,我学的很浅显能用就可以了。
一、OneNet
- 这个是OneNet的网址,免费的,对于初学者像我这样的就很友好。注册一个账号,好像还得实名认证,然后创建一个产品,在该产品下创建设备devices即可,什么都不用管了。
- OneNet支持很多协议像Http、Mqtt什么的,类似一个服务器,你的安卓端和单片机端只负责相互向对方发数据即可,之间的数据传递、分发了什么都不需要你来管。
- Mqtt协议只需要知道订阅和发布即可,大概就是你订阅我(完成这个动作)我来发布消息你就会收到,因为你订阅我了关注我了,消息推送给你。通过我订阅你了,你要发送消息,那么我这里也会收到,如果很多设备都订阅你了,那么你发布消息之后这些设备都会收到消息。
二、stm32_Mqtt_ESP8266
- 首先这个ESP8266是个WIFI模块都很熟悉,他和单片机的串口接口接线即可。有很丰富的指令集,刚入手的话可以用串口助手简单的发送几个指令看看WIFI模块有什么相应的动作,比如:串口助手发送AT+RST,模块返回复位成功。
- 就简单的贴一下关键代码的理解,我觉得对以后写C很有帮助
这三个函数是C库里的很实在,之前从没用过C库的函数也不知道,太尴尬了
sprintf(ClientID,"%s",DEVICEID); //把某数据按照某种格式存放到数据当中
memset(ClientID,0,128);//把某个数组可选大小清0,这是最快的方式,以前都是自己for循环的 尴尬····
memcpy(&MQTT_TxDataInPtr[2],data,size);//把某数组copy到另一个数组,这个也特别好,以前也是自己写的类似的用 实在是尴尬····
这里有一个这样的思想,把自己要发的数据先打包好放到数组当中最后等着发送出去。接下来这种方式对指针操作会有一定的提高。
unsigned char MQTT_TxDataBuf[5][300];
unsigned char *MQTT_TxDataInPtr;
unsigned char *MQTT_TxDataOutPtr;
unsigned char *MQTT_TxDataEndPtr;
memcpy(&MQTT_TxDataInPtr[2],data,size);
MQTT_TxDataInPtr[0] = size/256;
MQTT_TxDataInPtr[1] = size%256;
MQTT_TxDataInPtr+=300;
if(MQTT_TxDataInPtr==MQTT_TxDataEndPtr)
MQTT_TxDataInPtr = MQTT_TxDataBuf[0];
定义个5行每行300空间的数组,定义一个头指针一个尾指针一个中间指针。当我们
第一次打包好数据之后就会把数据Copy到二维数组的第一行当中,在刚开始头指针
和中间指针都指向数组的开头,MQTT_TxDataInPtr+=300; 之后头指针指向第二行
这个时候判断头指针和中间指针指向的位置不同即可判断打包的缓冲区数组内有了
数据,这个时候就可以把数据发送出去
三、AndroidStudio
安卓基于Java开发,面向对象这玩意我感觉最大的难点就是你并不知道他有什么方法,按照C语言的思想就是我需要什么功能就自己写什么功能。
这不Java就有Mqtt包,百度搜一下都有什么方法然后填入代码即可连接。
提供源码