收藏官网首页
查看: 30095|回复: 4

[资料分享] 人人都可以DIY的Arduino UNO智能灯(三)

321

主题

1054

帖子

4513

积分

论坛元老

Rank: 8Rank: 8

积分
4513
QQ
跳转到指定楼层
楼主
发表于 2017-6-13 20:24:26 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
校园创客福利
本帖最后由 Genius 于 2017-6-15 11:33 编辑

本文出自机智云论坛,版权所有@bigfanofloT,转载请注明出处
前面说到了设备联网,接下来是进行MCU端的开发。本节详细的描述了如何使用下载的MCU工程,如何根据自动生成的代码提示去填充用户业务相关的代码。

关于MCU代码自动生成的原理:
借助MCU代码自动生成工具,自动生成的代码已经根据用户定义的产品数据点信息,并针对STM32esp8266等平台,生成了对应的机智云串口协议层代码,用户只需要调用相应的API接口或添加相应的逻辑处理即可。代码框架如下图所示:

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




五、MCU端编程

Step1解压下载的工程,找到Gizwits文件夹,把它复制/移动到arduinoIDE安装目录下的libraries文件夹下。例如我的是D:\Arduino\libraries

Step2:接下来找到工程目录下的examples文件夹,里面有2个文件夹networkConfigsimpleTry,进去后有同名的Arduino文件,后缀名为.ino。

使用ArduinoIDE打开这2个文件:

simpleTry.ino是本次项目工程,里面有程序框架,以及告知了用户在哪里填充接入机智云的代码;networkConfig.ino是配置入网的例程,因为常见的智能硬件产品是没有键盘和显示屏的,因此需要一种技术来让它获取路由器的SSID和密码,首选是通过手机APP辅助。这里简单的介绍一下方法,通过一个按键来触发设备进入配网模式,然后手机APP把SSID和密码广播给设备,原理如下图:
这里需要说明的是,机智云开发的配网方案有2种,取名为AirLink和SoftAP,设备第一次联网是要进行配置的,以后它就记住了这个路由器的SSID和密码,无需配置,除非更改了SSID、密码等情况发生,就需要重新进行配网操作。


Step3WS2812B是一个集控制电路与发光电路于一体的智能外控LED光源。其外型与一个5050LED灯珠相同,每个元件即为一个像素点,只需占用MCU一个IO即可驱动。我们先安装WS2812B型RGBLED的驱动库Adafruit_NeoPixel,下载地址为https://github.com/adafruit/Adafruit_NeoPixel,这个库的使用说明可以参考https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library

把它解压后拷贝到ArduinoIDE安装目录的\libraries文件夹下,例如我的目录是D:\Arduino\libraries
先不用急着添加应用代码,先在simpleTry.ino中添加一下硬件模块底层驱动的测试代码(可下载高清大图查看):
RGB LED测试OK的话是这样子的效果:
Step4我们把networkConfig.ino中的部分代码(按键驱动等,处理配网问题)拷贝到本次项目的工程simpleTry.ino中,注意凡是串口打印调试的都要注释掉,因为我们的Arduino UNO R3只有一个串口,要用来和WiFi模块通信。然后需要根据注释填充数据点代码,1是手机端APP控制RGB LED亮灭,2是手机端APP单独控制RGB LED的RGB颜色值,3是手机端APP一键控制RGB LED的组合颜色值,具体的接口都给出了详细的注释,我们直接填充就可以啦~

如下图(下载高清大图放大查看效果更好哦~),左边为我们在开发者中心下载的工程文件simpleTry.ino,右边为修改好后的,作为一个对比,可以清晰的知道需要添加的用户代码。
第30~149行蓝色方框为与按键触发配网有关的代码。
第168~191行为WIFI状态处理有关代码,定义了2个按键key1、key2分别来触发不同的配网方式,板载黄色LED连接到了管脚13,我们把它作为配网操作过程的状态提示,本次采用的方式是:通过手机APP辅助,长按key2 5秒后板载LED亮起,WIFI模块连接路由器成功后则熄灭,关于这些按键和WIFI状态处理的代码是从networkConfig.ino拷贝来的。
第11~16行代码定义RGB LED使用的管脚和个数以及创建了piexls对象;
第20~28行是自己利用Adafruit_NeoPixel类方法编写的一个能够控制所有RGB LED的函数;
第154~162行初始化了RGB LED、板载LED、按键。

一个重要问题是,很多人会问,我生成了MCU工程后,要到哪里添加代码呢?怎么修改呢?

第195~231行,黄色方框注释内容就是自动生成的,用于帮助用户填充业务代码。
第232~256行代码基本就是黄色方框代码的拷贝,这就是我们在云端创建的用于描述产品功能的数据点在MCU代码里的表达方式,因为对于控制LED,需要保持颜色变量值不被销毁,所以我们把定义的数据点相关5个变量加了static关键字使之成为静态变量,当然你也可以直接把它们放到函数外面作为全局变量。
第258~266行实现的是开启/关闭红色灯的功能。
第268~274行实现的是设定LED组合颜色的功能。
第276行实现的是设定LED红色值、设定LED绿色值、设定LED蓝色值的功能。

Step5:至此MCU端代码修改完毕,编译并烧录代码到Arduino UNO板卡;






1、机智云QQ群:G1群:104975951 G2群:491509598 G3群:287087942
机智云爱好者-APP开发群: 599735135
QQ群目前非常活跃,欢迎大家参与进来,交流,讨论,答疑,解惑~~
2、机智云微信公众号: 机智云 gizwits、 机智云智能宠物屋go-iot
关注机智云Gizwits官方公众号随时掌握最新资讯和活动信息

1

主题

4

帖子

127

积分

注册会员

Rank: 2

积分
127
沙发
发表于 2018-2-17 20:06:34 | 只看该作者
楼主能把图再发一次吗,这图像素很低,看不到放大

0

主题

2

帖子

20

积分

新手上路

Rank: 1

积分
20
板凳
发表于 2019-1-3 00:02:16 | 只看该作者
楼主可以上传一下代码文件吗,或者高清大图,这里实在是看不清,麻烦了!

0

主题

2

帖子

20

积分

新手上路

Rank: 1

积分
20
地板
发表于 2019-1-3 00:03:28 | 只看该作者
楼主可以上传代码文件或者发一下高清大图吗,这里实在是看不清,麻烦了!

0

主题

1

帖子

68

积分

注册会员

Rank: 2

积分
68
5#
发表于 2019-4-29 20:20:46 | 只看该作者
汉枫LPB120模块
求代码文件或者高清大图,上面的图太模糊了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表