Arduino+涂鸦云,教你制作幻彩灯带

更新时间Invalid date程序员小哈

概况

大家好,我是程序员小哈。前一阵参加了涂鸦智能【幻彩灯带】Arduino开发实战训练营,参与完整个过程,收获颇丰,今天对本次制作的幻彩灯带进行一下小结,希望以后可以再次参与其他内容的训练营活动。

简介

本次DIY内容为基于Arduino+tuya SDK实现的幻彩灯带。实现了通过 涂鸦智能 App 下发 打开灯带 指令控制WS2812全彩灯板的开关,下发 音乐指令控制灯带进入音乐律动模式。

作品视频展示: https://www.bilibili.com/video/BV1KU4y1V7Tw/

物料清单

硬件 (4)软件 (2)
  • 涂鸦WiFi模组

    数量:1

    本次使用的WiFi模组型号为:CBU

  • Arduino UNO开发板

    数量:1

    For-arduino改进行家版本UNO-R3 控制开发板ATmega328P单片机模块

  • 声音传感器模块

    数量:1

    带有AO引脚的声音传感器模块

  • WS2812全彩灯板

    数量:1

    8位WS2812全彩灯板

步骤

具体实现

创建产品

  1. 涂鸦智能IoT 平台 上,在后台产品开发-->照明-->幻彩灯带 下,创建一款 幻彩灯带 产品,产品方案选择自定义方案

  1. 创建产品后,添加功能定义。由于要控制灯带的开关,需要添加一个布尔型功能点。需要设置不用的工作模式,所以需要添加一个枚举类型的功能点。

注意记录上图中的PID值,此值在稍后的Arduino UNO代码中会使用。

填写一个较规范的标识符。因为是通过标识符控制功能的实现。

  1. 进入硬件开发标签。

如果要跟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代码移植

引用Arduino 库

菜单“项目”-->“加载库”

  1. 引用tuya库

如果Arduino官方已经收录了涂鸦SDK的话,那么在“管理库”中检索tuya即可;

如果没有被收录,那么使用“添加.ZIP库”文件的方式加载库。

  1. 引用Adafruit_NeoPixel库

如果因为网络的原因,管理库中下载Arduino库困难,也可以使用别人下好的库,将其放在Window系统下的:我的电脑>文档>Arduino>libraries 文件夹中。

Arduino初始化

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模组,避免干扰。

配网

小结

整个开发过程简单高效,大大节省了开发时间,为传统设备实现上云,提供了一个快接的方式。

您正在浏览的内容为涂鸦开发者平台注册用户自主发布,版权归原作者所有,涂鸦开发者平台不拥有其著作权,亦不承担相应法律责任,涂鸦开发者平台不对该等内容作出不违反、不侵权的陈述与保证。您应知晓并了解您对于该等内容的复制、改编、转发传播等任何其他使用行为应当符合法律法规并应取得相关权利人的许可,您的该等行为所造成的全部相应后果(包括但不限于侵权、违约、受损、与第三方的纠纷等)均应由您个人承担。内容知识产权相关条款可查看涂鸦开发者平台用户协议。如果您发现有涉嫌侵权的内容,请立即通过平台上的联系方式联系平台进行举报并发送有关证据,一经查实,平台将立刻删除涉嫌侵权内容。

喜欢举报