我们知道,使用机智云自助开发平台会根据产品定义的数据点生成对应产品的设备端代码即MCU代码包。自动生成的代码实现了机智云通信协议的解析与封包、传感器数据与通信数据的转换逻辑,并封装成了简单的API,且提供了多种平台的实例代码。当设备收到云端或APP端的数据后,程序会将数据转换成对应的事件并通知到应用层,开发者只需要在对应的事件处理逻辑中添加传感器的控制函数,就可以完成产品的开发。

那下载代码包后,我是直接可以进行编译呢还是需要在做一点细节修改呢?今天来解密。

1、机智云协议代码下载

生成代码时选择其他平台生成,生成后代码并将其下载解压,如下:

在我们移植之前,必须知道需移植的MCU是否具备以下条件

①平台支持两个串口接口(至少一个,两个方便调试),一个负责与 wifi 模组间的数据收发,一个用于调试信息打印,WIFI通讯串口波特率必须是 9600。②平台支持定时器(1ms 精确定时)为系统运行提供时基。③平台支持至少 2K 的 RAM 空间(可调整环形缓冲接收区大小,来解决数据协议的处理异常问题)。

2、工程模板准备

因为要用到TIM、USART,所以我们直接使用原子的定时器工程进行移植,首先修改工程目录名字

3、协议及外设移植

通过机智云生成的其他平台代码内的Gizwits、Utils文件夹复制到我们的工程目录

移植到工程中

在HARDWARE里面创建KEY和USART对应的文件夹,并将写好相关代码

将串口、按键以及Gizwits的代码全部添加到工程中(对于怎么添加创建文件,指定头文件路径这些这里就不再赘述)

4、代码修改

4.1、修改usart3.c文件

在usart3.c文件中编写串口3的初始化和中断服务函数,将中断接收的数据写入到gizPutData()函数,代码如下:

4.2、修改timer.c文件

在定时器 3 中断服务函数中添加 gizTimerMs()函数,并且添加 gizwits_product.h 头文件,代码如下:

(注意:gizwits_product.h 文件中没有对 gizTimerMs()函数做声明,需自己添加,否则编译会出现警报)

4.3、修改 gizwits_product.c 文件

因为我们修改gizwits_product.c文件用到 LED和串口发送,所以要添加头文件 led.h 和usart3.h。

在uartWrite函数中添加串口3发送函数,而GIZWITS_LOG用到printf定义在工程SYSTEM分组下 usart.c 文件已经有添加了,我们不需要再添加,需要添加代码如下:

添加完串口发送函数后,回到 gizwitsEventProcess()用户处理事件函数中添加我们的用户事件逻辑,这里我们是控制 LED 的亮灭, 在 EVENT_LEDONOFF 事件中根据返回的开关量添加其 LED1的开关控制,代码如下

在mcuRestart()函数中添加软复位函数,代码如下:

4.4、修改usart.c文件

4.5、添加main.c代码

#include "led.h"

#include "delay.h"

#include "key.h"

#include "sys.h"

#include "usart.h"

#include "timer.h"

#include "usart3.h"

#include "gizwits_product.h"

//dataPoint_t currentDataPoint;

void Gizwits_Init(void)

{

TIM3_Int_Init(10-1,8400-1); //1MS

usart3_init(9600);//WIFI

memset((uint8_t*)&currentDataPoint, 0, sizeof(dataPoint_t));

gizwitsInit();//

}

//void userHandle(void)

//{

LED1

if(LED1==0)

currentDataPoint. valueLED_OnOff= 1;

else if(LED1==1)

currentDataPoint. valueLED_OnOff= 0;

//}

int main(void)

{

int key;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

delay_init(168);

uart_init(115200);

LED_Init();

KEY_Init();

Gizwits_Init();

while(1)

{

userHandle();//Óû§²É¼¯

gizwitsHandle((dataPoint_t *)&currentDataPoint);

key = KEY_Scan(0);

if(key==KEY1_PRES)//KEY1

{

printf("WIFI  ½øÈë AirLink ģʽ\r\n");

gizwitsSetMode(WIFI_AIRLINK_MODE);//Air-link

}

if(key==WKUP_PRES)//KEY_UP

{

printf("WIFI¸´Î»,ÇëÖØÐÂÅäÖÃ\r\n");

gizwitsSetMode(WIFI_RESET_MODE);//WIFI

}

delay_ms(200);

LED0=!LED0;

}

}

5、编译及改错

修改完成后编译下整个工程,应该会提示如下2个重复定义的错,保留其中一个,只需要去gizwits_product.c或者main.c删除或屏蔽掉即可:

解决办法:

删除或屏蔽gizwits_product.c里的userHandle

删除或屏蔽gizwits_product.c里的dataPoint_t currentDataPoint;

6、功能测试

6.1、ESP8266接线方法

将ESP8266对应的引脚接在开发板上的串口3上就可以了,接线方法如下图:

6.2、ESP8266配网

按下KEY1按键,ESP8266进入AieLink模式(具体怎么配网我下一篇博客会聚集讲解),配网成功后会反馈一下信息,如下图所示:

6.3、APP控制

成功后就可以通过Demo APP进行控制,控制灯和控制继电器原理都一样,都是高低电平导通!

控制时串口助手上也会反馈相关数据,方便我们调试,如下图所示:

那么我们就算是大功告成,此时,手机端把WIFI关掉,就可以直接用数据流量进行控制。配网成功后,只要硬件端不断电,那么我们就能随时随地的用手机去进行远程控制,这就是物联网应用。

相关推荐:

  1. 入门教程1:如何在机智云上创建自己的第一个设备

  2. 入门教程2:机智云自动生成代码工程及原理介绍

  3. 入门教程3:如何给ESP8266烧录Gagent固件,快速接入机智云实现透传功能

  4. 机智云轻网关方案,让智能设备套件开发更便捷、成本更低

  5. 应用技巧:ESP8266 SOC模式的机智云OTA流程

扫一扫,开启您的IoT开发之旅

leach协议c++代码_入门教程4:教你STM32F407标准库移植机智云代码(控制LED灯)相关推荐

  1. centos7 docker安装和使用_入门教程

    centos7 docker安装和使用_入门教程 原文:centos7 docker安装和使用_入门教程 说明:本文也是参考互联网上的文章写的,感谢相关作者的贡献. 操作系统 64位CentOS Li ...

  2. Flash:Flash动画设计软件界面的简介、Flash AS 3.0代码编程入门教程之详细攻略

    Flash:Flash动画设计软件界面的简介.Flash AS 3.0代码编程入门教程之详细攻略 目录 Flash动画设计软件界面的简介 快捷键 菜单栏 下边工具栏 右边工具栏 工具箱 Flash A ...

  3. 【STM32移植机智云】超详细教程#2ESP8266移植机智云教程‘代码移植’

    1.引言 本人购买了一个ESP8266的WiFi模块,想做一个物联网控制小灯的demo. 本文记录了基于机智云平台,移植代码,实现物联网小灯详细操作步骤. 并不是移植步骤很麻烦, 只是文章真的写的极其 ...

  4. STM32F103C8T6基础开发教程(HAL库)—点亮第一颗LED灯

    STM32F103C8T6基础开发教程目录 STM32F103C8T6基础开发教程(HAL库)-开发环境配置 STM32F103C8T6基础开发教程(HAL库)-Keil添加注释的快捷键 STM32F ...

  5. esp32录音功能开发_【安信可ESP32语音开发板专题①】ESP32-A1S音频开发板之离线语音识别控制LED灯...

    本博客学习由 一.前言 离线语音,顾名思义:在不连网络的状态下,产品能识别语音指令并执行相应的控制输出. 安信可基于乐鑫ESP32芯片开发的ESP32-A1S开发板智能语音助手,可支持唤醒词引擎(Wa ...

  6. 【入门篇】ESP8266直连智能音箱(天猫精灵)控制智能灯

    本系列博客学习由非官方人员 刘一周 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 本系列博客内容是通过乐鑫ESP8266直连天猫精灵,实现语音控制智能灯 ...

  7. FPGA(1)基础入门 -- 按键控制led灯

    目录 效果说明 1.配置输入输出变量 2.变量赋值 3.配置引脚(输入输出变量) 代码 效果说明 key1按键按下,led1被点亮. key2按键按下,led2被点亮. 1.配置输入输出变量 inpu ...

  8. led计数电路实验报告_「正点原子FPGA连载」第八章 按键控制LED灯实验

    1)实验平台:正点原子开拓者FPGA开发板 2)本实例源码下载:请移步正点原子官网 第八章 按键控制LED灯实验 按键是常用的一种控制器件.生活中我们可以见到各种形式的按键,由于其结构简单,成本低廉等 ...

  9. 利用声音传感器控制led灯功能_云中树莓派(4):利用声音传感器控制Led灯

    1. 声音传感器及其配置 声音传感器如下图所示: 将 VCC 引脚接入树莓派 5V 引脚,将 GND 引脚接入树莓派 GND 引脚,将 OUT 引脚接入树莓派 GPIO20. 要注意,模块在环境声音强 ...

最新文章

  1. java第六次作业 计科1501班 张鹏
  2. win7计算机双击空白,win7系统控制面板“打开或关闭Windows 功能”空白没有任何选项的解决方法...
  3. 推荐几个手机网站在线预览测试工具
  4. pure-ftp 修改用户信息
  5. ASP.NET中实现模版的动态加载(转)
  6. 首次安装pytorch--实测可用
  7. R语言和Rstudio的介绍和安装
  8. maven环境setting配置文件详解
  9. aspose-cells-8.52问题记录,excel转pdf,字体,格式
  10. p8刷原生android,【EMUI3.1全局】原生Android M + IOS 7完美结合,听说跟P8更配哦
  11. Artemis集群(18)
  12. python openstack vpc互通_深入浅出新一代云网络——VPC中的那些功能与基于OpenStack Neutron的实现(二)-带宽控制...
  13. 如何快速提高英语听力水平|学习心得+听写经验,附进入英文新闻殿堂的垫脚石
  14. 主流消息中间件技术简介
  15. 精灵图,背景图缩放。盒子阴影,
  16. 【畅言】不把C作为第一门语言是个好主意么?
  17. 计算机无法打开cad文件,电脑打不开cad文件怎么办
  18. 苹果发布iOS 11.2新测试版:只为iPhone X
  19. 计算机一级自动筛选怎么做,Excel自动筛选小技巧
  20. 实时对讲是怎么发起的_微信对讲机怎么用【详细介绍】

热门文章

  1. python用三种方式定义字符串、并依次输出_Python 字符串格式化输出的3种方式
  2. 怎么把苹果手机通讯录导入华为手机_苹果手机资料快速导入华为手机。苹果的ios系统也可以把资料导入安卓!...
  3. JDK源码分析(2)LinkedList
  4. linux gpio-led
  5. poj 3211 Washing Clothes
  6. 在变量前面加个叹号什么意思_a little表示很少,quite a little什么意思?形容数量多少的用法...
  7. Emacs:报错:File error: Cannot open load file,cl-lib解决
  8. HIDL第一个Hello World
  9. 修改Chrome默认搜索引擎
  10. Git/Repo/Gerrit区别