基于uCOS-II系统使用STM32和Esp8266对接Yeelink物联网平台的Demo

        首先祝大家新年快乐

        这是本人第一次写博客,希望大家多多支持,以后会尽量写出更好的文章分享给大家,谢谢

        下面向大家介绍下如何在STM32平台上基于uCOS-II系统使用乐鑫的Esp8266 wifi模块对接青岛亿联客(Yeelink)物联网平台,旨在和小伙伴们一起学习如何使用基于AT指令的wifi模块对接云服务。日后还会发布基于MiCO SDK的庆科(MXCHIP)模块、乐鑫Esp8266 SDK的Esp8266无线模块的个人项目,不需要外接MCU,直接开发wifi模块内部的MCU固件,大大提高运行效率。

        一、平台介绍

        硬件平台:STM32F103ZET6、Esp8266

        软件平台:uC/OS-II

        物联网云平台:Yeelink

        开发板:正点原子精英板子


        本系统基于Yeelink平台,所以需要开发者先登录Yeelink后台,注册一个用户。该平台的具体使用,可参照平台提供的使用说明,在此不做过多介绍。代码已在阿里云代码托管平台http://code.aliyun.com公开,https地址:https://code.aliyun.com/chuancey/uCOS_Esp8266.git , SSH地址:[email protected]:chuancey/uCOS_Esp8266.git ,欢迎登陆阿里云git搜索查看并下载。


        二、系统框架介绍

        系统创建了一个启动线程,在启动线程中创建三个主线程。


        1. WiFi_Task

        该任务中创建了三个子线程:

        (1) AirKiss_Task

        功能:使用按键触发wifi模块进入AirKiss功能,使用手机配置wifi模块连接手机所接入的路由器,避免了设备上没有用户交互界面时无法让wifi连接路由器的尴尬状况。

        使用该功能时,要首先在微信上关注带有AirKiss协议支持的公众号,比如【乐鑫信息科技】、【机智云智能宠物屋】等等,有能力的可以自己将AirKiss协议移植到自己的微信平台上;然后将手机连接至目标路由器上,打开AirKiss功能,输入路由器密码;按下相关按键,设备进入AirKiss配网功能,同时手机打开AirKiss进行配网。

        (2) AccessRouter_Task

        功能:按下相关按键,wifi模块连接程序中写死的路由器

        本线程和上面的AirKiss_Task线程是功能并列的两个线程。

        (3) WiFiStatus_Task

        功能:指示wifi连接过程。连接中:绿灯快速闪烁;连接成功:绿灯常亮;连接失败:红灯常亮。wifi连接OK后,通知远程任务启动其功能。

        由于本人所使用的wifi模块AirKiss功能无法正常执行(单独将模块接入电脑,使用串口助手进行调试,确实不能正常进入AirKiss功能),所以只有在进入AccessRouter_Task线程时,才能指示wifi连接状态。读者下载代码后,可在AirKiss_Task线程中发送本线程所需要的相关信号量,以完善对AirKiss连接wifi时的状态指示功能。


        2. Device_Task

        功能:

        (1) 读取参数存储区,判断是否向后台添加过设备。如果没有,则通知远程任务Remote_Task自动向后台添加设备,使设备一上电就可自动运行,不用再去登陆yeelink后台手动添加设备。向后台添加设备完成后,会自动保存后台用户账号和设备信息相关的参数信息。

        (2) 新设备存在后,通知本线程进行周期性的数据采集。由于Yeelink平台要求数据上报的周期至少为10s,否则后台会报错。本系统数据采集和上报的周期为20s。数据采集完成后,通知远程任务将数据上报给后台。


        3. Remote_Task

        功能:接收wifi正常连接的通知后,实现以下两个功能

        (1) 创建子线程AddNewDev_Task,根据需要向后台创建新设备。

        (2) 接收Device_Task线程的通知,向后台上报采集的数据。


        三、工程目录和简要代码说明

        项目工程目录如下:

        文件夹App中主要包含了和启动线程、上述三个主线程、中断处理函数、系统初始化等相关的代码文件。主要有App_StartTask.c、device.c、remote_yeelink.c、stm32f10x_it.c、yeelinkDefine.h和其他配置相关的.h文件和.c文件。

        文件夹Bsp主要包含了MCU片上外设的驱动代码。

        文件夹cJSON包含了设备和后台通信时的JSON格式数据解析的算法,对于JSON格式的初步了解可参考http://www.cnblogs.com/SkySoot/archive/2012/04/17/2453010.html

        文件夹HardWare包含了Led、Beep、Key、wifi和传感器DHT11等硬件的驱动代码。

        其余文件夹主要是Cortex-M3内核文件、STM32固件库、和uCOS源代码、项目工程等文件夹。

        特殊介绍下,yeelinkDefine.h文件定义了和后台通信相关的所有变量的定义,包括后台用户名和密码、主机Host名、端口、各类URL、各类http请求格式化字符串、数据上报的Json格式化字符串等各种定义。此文件只能被工程里的一个文件调用,不能被多个文件同时调用,否则会造成变量重复定义的错误。因为此文件采用的变量定义的形式,不是宏定义的方式。

        remote_yeelink.c中定义了和后台通信常用的本地接口,包括获取ApiKey、查看后台设备、向后台增加设备、向后台增加传感器等,yeelink后台提供了大量能够满足用户各种需求的API接口,开发者可根据需要自行实现更多的本地接口,本工程只作为Demo。

        单片机和wifi通信的AT指令的发送和响应代码,结合了操作系统的信号量等待方式,而不是一般所用的单纯的延时等待,大大提高了程序运行效率。每发送一条指令,会立马收到wifi回应,然后发送信号量,发送指令的函数请求到信号量后就立马继续向下执行,而不是等待很长时间后再判断是否确实收到回应。

        每一个函数的关键功能处都有log输出,可以根据打印的log定位程序运行时哪里出现了错误,极大方便了程序的调试。log打印不仅输出了开发者要求输出的文本内容,同时输出了此log打印语句所在的文件名称、函数名称、代码行数,一眼就能定位到错误出现在哪里,甚至可以省略JLINK工具。


        四、结果

        下图是设备运行后,自动在后台创建的设备并添加的湿度传感器的数据列表,展示了环境湿度曲线


       


你可能感兴趣的:(物联网,嵌入式网络,wifi)