小编使用STM32已经接近一年,在去年寒假期间师兄教学STM32最小系统接入OneNET云平台上传DHT11的温湿度数据,今年参加很多的专业竞赛。在参加数学建模期间,写下这一个简单的教程。一开始使用OneNET云平台,都不知道还有麒麟座开发板的源代码可以借鉴,所以接入云平台就比较麻烦或者说是困难,在多次实践中不断的摸索,在今年3月份成功的用正点原子开发板和ESP8266,EDP协议接入了中移物联网的云平台,实现了控制开发板上面的灯。暑假期间,参加竞赛之余,实现云端控制继电器,进而实现远程控制风扇。
既然在使用ONEnet云平台你自己对云平台还是要有一定的了解,首先登陆页面建立一个项目如图
项目建立完,你需要保存一个设备ID和秘钥,在设备概况中找到APIKEY这就是密码,在设备详情中可以找到设备ID,分别如下图
下面进入正题,项目工程文件主要包含了主函数main.c、esp8266.c、esp8266.h、edp.c、edp.h、onenet.c、onenet.h,因为整体代码难度不大所以就直接简单的看一下工程文件截图
代码中首先看到的是继电器初始化函数,继电器就是选择一个高低电平来触发继电器,通俗的来说继电器就是一个开关。一般单路继电器可以用3.3V到5V电源驱动供电进行工作,继电器右边有常闭常开,两个回路,看自己的需求进行连接,当继电器被触发打开,继电器会有一个很清脆的声音表示继电器已经接通电路,具体继电器怎么使用还要自己多摸索。
下面进入硬件初始化函数,相当于写了一个子函数将所有初始化集中到一个函数中,在主函数中一开始进行调用,实现所有的初始化
int main(void)
{
unsigned short timeCount = 0; //发送间隔变量
unsigned char *dataPtr = NULL;
Hardware_Init(); //初始化外围硬件
ESP8266_Init(); //初始化ESP8266
while(OneNet_DevLink()) //接入OneNET
delay_ms(500);
while(1)
{
if(++timeCount >= 1000) //发送间隔10s
{
UsartPrintf(USART_DEBUG, "OneNet_SendData\r\n");
OneNet_SendData(); //发送数据
timeCount = 0;
ESP8266_Clear();
}
dataPtr = ESP8266_GetIPD(0);
if(dataPtr != NULL)
OneNet_RevPro(dataPtr);
delay_ms(10);
}
}
因为EDP协议下发命令需要一个数据流所以必须提前发一个数据上去出现一个数据流来进行下发命令,通俗的讲就是两个人对话需要借助电话或者其他通讯工具进行通信
主函数前段主要做的工作就是实现系统的初始化和接入云平台,while(1)循环中实现的就是10秒发送一个数据保持EDP连接。
本程序最重要的几个点就是实现改程序的接口在ESP8266.C中你需要修改无线热点名称和密码如下图。你需要修改 的就是第16行代码前面是热点名称,后面是热点密码
你还需要修改的就是onenet.c中的设备ID和秘钥如下图
最重要的一步到了,你如果想创新你可以修改onenet中的第249行代码实现你自己想做的东西,我控制的是风扇所以我在这行代码中用的是
if(strstr((char *)req, “fengshan”))
当然你也可以改成你自己想要的,这样传感器下端的代码接口就改好了,现在需要在平台上新建一个应用。进入应用管理,点击添加应用,编辑应用依次操作马上进入最关键的一步
添加开关,开关格式必须改成我对应的格式,不然命令下发过后,开发板识别不了也不会进行相应的操作。
具体编辑如下图
你如果将代码中的fengshan改了上图中的fengshan也得改成对应的代码,至此远程控制风扇已经成功。
第一次发帖有不足的地方,多包涵最后附上源码仅供参考。
有啥问题的加我QQ359870477联系,以后就不在论坛回复了,论坛回复比较慢,且不方便。
熟悉STM32单片机应用设计,竞赛作品设计,熟悉使用gps,gprs,oled lcd1602显示,温湿度传感器,
MQ-2,MQ135,MQ9等气体传感器,对接学生主流OneNET云端远程控制,可以接单片机类的项目、
熟悉易安卓手机小型APP开发、HMI智能串口屏开发、熟悉红外光电管控制格力空调,AD绘制PCB接常规的双面板任务
PS:有偿提供嵌入式解决方案,熟悉各类传感器,使用51单片机、STM32F1、F4系列产品,智能小车解决方案,BI也设计、代码咨询加QQ1334813453。