大家好,我是程序员小哈。
前一阵参加了涂鸦智能【幻彩灯带】Arduino开发实战训练营,参与完整个过程,收获颇丰,今天对本次制作的幻彩灯带进行一下小结,希望以后可以再次参与其他内容的训练营活动。
概况
本次DIY内容为基于Arduino+tuya SDK实现的幻彩灯带。实现了通过 涂鸦智能 App 下发打开灯带指令控制WS2812全彩灯板的开关,下发音乐指令控制灯带进入音乐律动模式。
注意记录上图中的PID值,此值在稍后的Arduino UNO代码中会使用。
填写一个较规范的标识符。因为是通过标识符控制功能的实现。
如果要跟MCU配合使用,即CBU模组只负责上网,MCU做主控。那么“已选云端对接方式”要选择涂鸦标准模组MCU SDK开发。
然后选择模组,这里推荐WBR3模组和CBU模组。
模组选择完毕,在此页面的下方,下载资料区域,涂鸦IoT平台会根据你选择的模组和定义的功能,提供一份开发资料,下载此资料可以让您快速了解涂鸦物联网平台如何使用,并加速开发过程。
在公共资料区域,还可以下载涂鸦智能App。
本实例中选用的是CBU模组。
要想实现MCU+模组组合在一起的开发方式,首先我们要对MCU和模组之间的通讯协议了解清楚,而要了解通讯协议,我们可以借助官方的模组调试助手,利用它可以方便、快速的理解MCU与模组的交互过程。
遇到困难,也方便调试解决问题。
模组调试助手使用教程 https://developer.tuya.com/cn/docs/iot/module-debugging-assistant-instruction?id=K9hs0cj3lf0au
在 MCU 模拟模式中,涂鸦模组调试助手会模拟 MCU 自动回复模组正确的协议数据,用手机给模组配网后可测试 DP 数据的上报下发。
对应上面的信息,模组的串口2的发送引脚,输出的Log信息如下:
好了,有了上面的了解,我们接下来看一下使用Arduino+CBU模组实现的幻彩灯带如何进行控制。
菜单“项目”-->“加载库”
如果Arduino官方已经收录了涂鸦SDK的话,那么在“管理库”中检索tuya即可;
如果没有被收录,那么使用“添加.ZIP库”文件的方式加载库。
如果因为网络的原因,管理库中下载Arduino库困难,也可以使用别人下好的库,将其放在Window系统下的:我的电脑>文档>Arduino>libraries 文件夹中。
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
strip.begin(); // Initialize NeoPixel strip object (REQUIRED)
strip.show(); // Initialize all pixels to 'off'
DebugSerial.begin(9600);
Serial.begin(9600);
//Initialize led port, turn off led.
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
//Initialize networking keys.
pinMode(key_pin, INPUT_PULLUP);
//incoming all DPs and their types array, DP numbers
//Enter the PID and MCU software version
my_device.init(pid, mcu_ver);
my_device.set_dp_cmd_total(dp_array, 17);
//register DP download processing callback function
my_device.dp_process_func_register(dp_process);
//register upload all DP callback function
my_device.dp_update_all_func_register(dp_update_all);
last_time = millis();
music_last_time = millis();
}
void loop() {
//进入配网模式
//Enter the connection network mode when Pin7 is pressed.
if (digitalRead(key_pin) == LOW) {
delay(80);
if (digitalRead(key_pin) == LOW) {
my_device.mcu_set_wifi_mode(SMART_CONFIG);
}
}
my_device.uart_service();
/* LED blinks when network is being connected */
if ((my_device.mcu_get_wifi_work_state() != WIFI_LOW_POWER) && (my_device.mcu_get_wifi_work_state() != WIFI_CONN_CLOUD) && (my_device.mcu_get_wifi_work_state() != WIFI_SATE_UNKNOW)) {
if (millis()- last_time >= 500) {
last_time = millis();
if (led_state == LOW) {
led_state = HIGH;
} else {
led_state = LOW;
}
digitalWrite(LED_BUILTIN, led_state);
}
}
if(work_mode==3)
{
if (millis()- music_last_time >= 50)
{
music_last_time = millis();
visualize_music();
}
}
}
注意:下载的时候,先不要连接涂鸦WiFi模组,避免干扰。
整个开发过程简单高效,大大节省了开发时间,为传统设备实现上云,提供了一个快速接入的方案。