STM32接入机智云--实现数据上传和命令下发
前言:
经过一天的努力,终于弄懂了怎么接入机智云,写博客记录一下,防止自己以后会忘记。
功能简介:
使用32单片机和ESP8266-01S接入机智云,将传感器采集的光照数据上传到机智云APP,同时实现远程控制LED灯。
前期准备:
1、注册机智云账号
2、ESP8266烧写机智云的官方固件
3、在机智云上创建新产品
4、准备一个写有串口3、定时3的工程模板
主要硬件准备:
1、STM32C8T6最小系统板
2、ESP8266-01S模块
3、BH1750光照传感器
模块接线:
ESP8266-01S模块:
VCC–3.3V GND–GND TX–PB11 RX–PB10
BH1750光照传感器:
VCC–3.3V GND–GNG SCL–PB6 SDA–PB7 ADDR–不接
1、注册机智云账号
进入官网注册
2、ESP8266烧写机智云的官方固件
机智云固件下载地址
下载的资源如下:
用ESP8266-01S模块的烧写第2个固件
ESP8266烧录模式的接线:
建议大家可以买个ESP8266的下载烧录器,省去接线的麻烦。
如果是其他串口模块,烧录模式的接线如下:
将TX接到串口模块的RX上,
将RX接到串口模块的TX上,
EN和VCC接3.3V
GND和IO0接GND
其余脚无视即可。
使用ESPFlashDownloadTool_v3.6.4.exe软件烧写固件
双击运行软件后,选择第1个
导入8Mb的固件后,按下图配置,点START开始烧写
判断是否烧录成功:
出现有FF FF 00 05开头的数据,说明已经成功烧录机智云的固件
3、在机智云上创建新产品
进入开发者中心
右上角的+创建新产品
产品分类可以不改,填写产品名称,选择WiFi/移动网络方案,最后点击保存
点击保存后会自动来到这个页面,点击去添加数据点
新建数据点
LED开关的数据点如下:
再添加一个光照值的数据点
点击应用 保存数据点
先来测试一下创建的产品是否可以和机智云APP通信
下载官方的Demo APP进行虚拟设备测试和后面的实际设备测试
下载后安装、注册账号,这个账号不是我们在机智云官网开发者中心注册的账号,需要另外注册。
启动虚拟设备
点击显示二维码后,使用手机上的机智云APP扫码绑定
点击推送可以将平台的数据发给手机APP
手机APP界面
接下来是移植机智云的代码到开发板中
拷贝产品密钥
粘贴刚刚拷贝的产品密钥,硬件平台选STM32F103C8X,后点击生成代码包
下载代码
下载的压缩包如下:
解压后,将这两个文件夹拷贝到我们准备好的工程模板(带串口3和定时3)中
4、准备一个写有串口3、定时3的工程模板
已放入工程模板中
打开我们的工程模板,新增两组文件夹,后添加对应的源文件(.c)
添加头文件路径
编译代码后会出现两处错误
第1处错误修改:
第2处错误修改:
再次运行编译后出现10个错误
把报错的注释掉,同时将修改 dataPoint_t currentDataPoint;
main.c文件中添加对应的头文件和定义设备状态结构体
继续根据错误 注释和修改
将HAL_NVIC_SystemReset();更改为NVIC_SystemReset();
接下来将233行到291行的都注释掉
被注释的函数有
PUTCHAR_PROTOTYPE
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
void timerInit(void)
void HAL_UART_RxCpltCallback(UART_HandleTypeDef*UartHandle)
void uartInit(void)
在int32_t uartWrite(uint8_t *buf, uint32_t len)函数里面注释掉for()循环,添加新的for循环
for(i=0; i<len; i++)//添加{USART_SendData(USART3,buf[i]);while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕 if(i >=2 && buf[i] == 0xFF){//实现串口发送函数,将0x55发送到模组USART_SendData(USART3,0x55);while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕 } }
再次编译后- 0 Error(s), 3 Warning(s)
警告可以不理,有强迫症的看下:
第1处警告
直接注释掉,没有用到这个变量
第2、3处警告
添加volatile关键字,防止编译器优化
继续优化代码
将void userHandle(void)放在main.c文件中
在userHandle()函数里添加需要上传到机智云平台的数据
我这里需要上传光照数据和LED1(PC13)状态值
//用户数据采集
void userHandle(void)
{//光照数据采集float light = LIght_Intensity();currentDataPoint.valueLight = light; //添加传感器数据采集//判断当前LED1开关量if(LED1==0)currentDataPoint.valueLEDSwitch = 1; //开else currentDataPoint.valueLEDSwitch = 0; //关}
串口3中断服务函数编写
添加gizPutData(&res, 1)函数,并且在文件上方加入对应的头文件#include “gizwits_product.h”
//串口3中断服务函数
void USART3_IRQHandler(void)
{u8 res; if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//接收到数据{ res =USART_ReceiveData(USART3); gizPutData(&res, 1);//数据写入到缓冲区}
}
定时器3中断服务函数编写
//定时器3中断服务程序
void TIM3_IRQHandler(void) //TIM3中断
{if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否{TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx更新中断标志 gizTimerMs();}
}
在main.c文件中定义一个协议初始化函数Gizwits_Init()
//协议初始化
void Gizwits_Init(void)
{ TIM3_Init(9,7199);//1MS系统定时USART3_Init(9600);//WIFI初始化memset((uint8_t*)¤tDataPoint, 0, sizeof(dataPoint_t));//设备状态结构体初始化gizwitsInit();//缓冲区初始化
}
机智云平台下发开关灯命令的处理
文件上方写上LED的头文件
添加头文件
main.c文件
/**********************************************
STM32接入机智云--实现数据上传和命令下发
********************************************/
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "timer3.h"
#include "usart.h"
#include "bh1750.h"#include "gizwits_product.h" //需要包含的头文件/* 用户区当前设备状态结构体*/
dataPoint_t currentDataPoint;//协议初始化
void Gizwits_Init(void)
{ TIM3_Init(9,7199);//1MS系统定时USART3_Init(9600);//WIFI初始化memset((uint8_t*)¤tDataPoint, 0, sizeof(dataPoint_t));//设备状态结构体初始化gizwitsInit();//缓冲区初始化
}//用户数据采集
void userHandle(void)
{//光照数据采集float light = LIght_Intensity();currentDataPoint.valueLight = light; //添加传感器数据采集//判断当前LED1开关量if(LED1==0)currentDataPoint.valueLEDSwitch = 1; //开else currentDataPoint.valueLEDSwitch = 0; //关}int main(void)
{u8 keyValue;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级delay_init(); //延时函数初始化USART1_Init(9600);LED_GPIO_Config(); //LED初始化KEY_GPIO_Config(); //按键初始化BH1750_Init();Gizwits_Init();printf("--------机智云-协议移植LED测试实验----------\r\n");printf("KB0:AirLink连接模式\t KB1:WIFI复位\r\n\r\n");while(1){userHandle(); //用户数据采集gizwitsHandle((dataPoint_t *)¤tDataPoint);//协议处理keyValue = KEY_Scan(); //扫描按键是否按下if(keyValue==KB0_Value) //KB0按键按下{printf("WIFI进入AirLink连接模式\r\n");gizwitsSetMode(WIFI_AIRLINK_MODE);//Air-link模式接入} if(keyValue==KB1_Value) //KB1按键按下{ printf("WIFI复位,请重新配置连接\r\n");gizwitsSetMode(WIFI_RESET_MODE);//WIFI复位}delay_ms(200);}
}
key.c文件
#include "key.h"
#include "delay.h"/*key初始化*/
void KEY_GPIO_Config(void)
{//定义结构体变量,注意:只能放在{后面GPIO_InitTypeDef GPIO_InitStruct;//配置时钟RCC_APB2PeriphClockCmd(KEY_GPIO_CLK, ENABLE);//配置引脚GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; //上拉输入模式GPIO_InitStruct.GPIO_Pin = KEY_GPIO_PIN;//GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(KEY_GPIO_PORT, &GPIO_InitStruct);
}u8 KEY_Scan()
{if(KB0==0||KB1==0) //任意一个按键按下{delay_ms(5);if(KB0==0) {while(KB0==0);//等待手松开return KB0_Value; }else if(KB1==0){while(KB1==0);return KB1_Value; }//while(!GPIO_ReadInputDataBit(KEY_GPIO_PORT, KEY_GPIO_PIN)); //等待手松开}return 0;
}
key.h文件
#ifndef __KEY_H_
#define __KEY_H_#include "stm32f10x.h"
#include "sys.h"#define KEY_GPIO_PIN (GPIO_Pin_0|GPIO_Pin_1)
#define KEY_GPIO_PORT GPIOB
#define KEY_GPIO_CLK RCC_APB2Periph_GPIOB//使用位操作定义
#define KB0 PBin(0)
#define KB1 PBin(1)//定义各个按键值
#define KB0_Value 1
#define KB1_Value 2void KEY_GPIO_Config(void); //key初始化
u8 KEY_Scan(void);#endif
下载程序到单片机上
打开串口助手,方便我们看输出的信息
按下复位按键后输出如下:
用一台手机A充当路由器。设置好手机A热点:不含中文、2.4G频段、保证这个热点能够上网
使用另外一台手机B连接手机A开的热点,手机B要提前装好机智云APP。手机B打开机智云APP
连上热点后,手机B的操作如下:
输入WIFI密码,后点击下一步
ESP8266-01S的选择乐鑫
先按下单片机的PB0按键,让WIFI进入AirLink连接模式,再点击“我已完成上述操作”
按下PB0按键后进入AirLink连接模式,串口输出的信息:
耐心等待
成功连接到设备,点击进入
在此处可以远程控制LED1的开关和收到光照数据
自此设备上电就会自动连上刚刚设置的热点,不用再“一键配置”了。如果需要重新配置,按下PB1按键,即可重新配置连接。手机连上与设备相同的热点,就能在机智云APP上收到来自设备的数据和控制设备。
解释下AirLink模式
最后:
个人觉得机智云不是很方便,因为想要上传新的数据或者是添加其他控制,都要重新生成代码包、下载、移植、改错…,前面做的事又要做一部分。
需要源码的可以自行下载。代码下载链接
下载操作:
STM32接入机智云--实现数据上传和命令下发相关推荐
- 4G模块接入阿里云-实现数据上传和命令下发
功能介绍: 使用4G模块EC600S和32单片机实现接入阿里云服务器,上传光照数据和下发命令控制LED灯(PC13),同时可以打电话.发短信. 前期准备: 1.首先你得有一个阿里云的账号,没有的话就注 ...
- STM32接入阿里云(FreeRTOS)-实现数据上传和命令下发
功能介绍: 将传感器采集的数据上传到阿里云,同时可以下发控制板上的LED灯(PC13) 前期准备: 1.首先你得有一个阿里云的账号,没有的话就注册一个 2.在物联网平台创建产品和设备 主要硬件准备: ...
- CC2530接入OneNET-实现数据上传和命令下发
前言: 之前物联网课设时就想用CC2530单片机和ESP8266-01S来实现数据上传和远程控制,当时在网上也找了很多资料,无果.本来是不想再碰这个的,由于我同学做毕设需要用到,所以再努力了一把,也终 ...
- C51接入OneNET-实现数据上传和命令下发
功能介绍: 使用51单片机将温度数据上传到OneNET云平台,同时可以实现远程控制LED灯的功能. 前提准备: 1.有OneNET的账号 2.刷入 OneNET 提供的 ESP8266 固件参考文章 ...
- RaspberryPi+OneNET MQTT方式 数据上传和命令下发
MQTT相关实验 第一节:Mosquitto 相关实验 第二节:域名解析和内网穿透实验 第三节:OneNET 相关实验 Gitee仓库地址: https://gitee.com/zhj0125/MQT ...
- 个人项目——STM32接入机智云教程
STM32接入机智云工具包下载 机智云演示Demo 为了叙述我后面做的物联网项目,同时方便大家学习利用机智云进行物联网开发,我觉得有必要把接入机智云的教程细致的描述一下. 硬件准备 开发板使用正点原子 ...
- 【最简单】STM32+ESP8266+MQTT+EMQX完成数据上传和点灯环节
首先要吐槽一点,那就是网络上的这方面资料杂七杂八,而且很多都是一模一样的: 然后我作为一个学生,没有多大的本事,就是想实现最基本的功能,然后在此基础上慢慢拓展.所以那些十分庞大的工程或者一些IoT物联 ...
- NodeMCU(ESP-12E)+阿里云实现数据上传和控制继电器开锁
源码及工具下载:https://github.com/RL-Y/NodeMCU-aliyun.git Arduino15:提取码:ythf :链接: https://pan.baidu.com/s/1 ...
- ESP8266接入阿里云物联网平台上传温湿度数据
简介 本文章使用NodeMCU(ESP8266)开发板和SHTC3温湿度传感器接入阿里云物联网(IoT)平台,并上传读取到的温湿度数据.每秒读取一次温湿度数据,每30秒上传一次30秒内的温湿度的平均值 ...
- STM32接入机智云平台
写博客作为学习记录,加深印象,可能写的不对,或者有些地方写的不全,欢迎在下评论哈,我会及时更正 传送门:博客汇总帖 如果ESP8266还没有烧录机智云固件,在我另一篇博客: ESP8266烧写机智云固 ...
最新文章
- java解密方法,java加密,解密方法
- 30年职场生涯的感悟[转]
- android 测试 大赛,轻量级android应用自动测试工具-2017全国大学生软件测试大赛.pdf...
- 设置ubuntu默认python3设置
- C#语法中String与string的区别
- c语言宏 转换字符串,c预处理程序-如何从C宏的值生成char字符串?
- 1.RABBITMQ 入门 - WINDOWS - 获取,安装,配置
- 谷歌不支持调用摄像头麦克风_谷歌突然推出Android 11开发者预览版 新版带来部分新功能和改进...
- 用最通俗易懂的方式打开区块链!
- WinAPI: waveInGetPosition - 获取当前输入设备的输入位置
- 安卓EventBus的使用方法
- html5显示特殊符号,HTML5特殊符号怎么显示-电脑自学网
- python math数学模块
- ionic -- 实现根据拼音字母搜索人员
- Installshield如何实现升级覆盖文件
- Android 中Goolgle 相关服务的移植[转]
- 按关键字爬取百度图片
- JS纯前端实现文件保存
- java如何实排班表时间算法_安卓自定义View-日历型排班表-CalendarScheduleView
- git remote prune
热门文章
- java毕业设计幼儿园管理系统Mybatis+系统+数据库+调试部署
- Linux卸载驱动方法
- 苹果手机微信语音没声音怎么回事_【云喇叭】微信+支付宝收款语音播报音箱一体机,播报声音大,嘈杂环境也听得见,自带流量卡可连WiFi,无需蓝牙,手机不在店里也播报...
- 电脑硬盘损坏如何修复?自己动手就能解决
- 使用Xftp6上传文件显示状态错误
- 软考-信息系统项目管理师-项目进度管理
- 封装继承多态还是封装抽象继承多态
- godot 以 WebAssembly 为目标平台编译导出模板
- python使用masscan扫描端口
- Android逆向之路---让我们试试另一种方法看漫画-(1)