涂鸦三明治BLE SoC 主控板(BT3L) 使用记录

Posted Love丶伊卡洛斯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了涂鸦三明治BLE SoC 主控板(BT3L) 使用记录相关的知识,希望对你有一定的参考价值。

目录

开发板购买

当然 肯定得先创 账号
官网商店:https://iot.tuya.com/purchase/store?page=1&tag=dev_board&q=
购买的 涂鸦三明治BLE SoC 主控板(BT3L)
相关资料可参考官方文档BT3L 模组规格书:https://developer.tuya.com/cn/docs/iot/br3l?id=K97rpns8f6xwh



还需要实名认证(好吧)

付完钱后等货

到货后实物展示


环境搭建

参考官网文档:https://developer.tuya.com/cn/docs/iot/development-guide?id=Kaiuyncrmvf3z

Arduino IDE我本机就有;

STlink驱动 先装了再说;
IDE添加STM32开发板,GitHub下载很慢(折磨);
STM32CubeProgrammer(添加/bin 到环境变量)

烧录相关

串口传输驱动

Jlink驱动 (我没装)
涂鸦云模组烧录授权平台(需要账号登录 https://pms.tuya.com/login

IDE添加tuya SDK库

手机APP 添加 开发板 简单测试

1、安装 智能生活 和 涂鸦云测 APP

安装 涂鸦APP(智能生活)我这应用商店可以直接搜到。

生活 官方链接:https://smartapp.tuya.com/smartlife

云测 官网链接:https://smartapp.tuya.com/smartautoapp

2、开发板上电

涂鸦三明治蓝牙 SoC 主控板(BT3L) 的原理图


你可以用其他板子给开发板供电,如stm32(3.3V GND)

或者上 USB转TTL

我这是直接将开发板插在了 创客Arduino Uno Rev3上。

3、运行 APP,添加设备(可以扫到 但添加失败了 不确定是不是我个人原因)

点击右上角+,选择“添加设备”

开发板上电,出厂不知道烧了啥程序,我们添加上看看


添加失败

莫非出厂不是默认的配网模式,查看官方文档 Arduino 接入涂鸦快速入门BLE SoC 主控板(BT3L)



那我们按下 开发板上的按钮康康,点按没有反应,长按 LED2亮了,在添加依然失败,呃···
可能是因为我接着BT3L烧程序的缘故,不知道咋滴扫描不到了,哎。(其实就是处于已配网状态)

尝试问题调试(失败)

接上 USB转TTL 波特率9600,收到数据如下:

查看了官方提供的蓝牙mesh协议文档,恩 10s一次的心跳包。

十六进制发送 55 AA 00 01 00 00 00

返回F0 55 AA 00 03 00 01 02 0507 55 AA 00 03 00 01 02 05,多了个F0 07不知道啥情况,忽视,后面帧头55 AA 版本号 00 命令字03 返回03好吧,数据长度是 00 01 数据为02,CRC8为05,我们转到03命令看看

0x02是已绑定状态,这应该很能说明问题了,设备有蓝牙信号,但是无法被APP识别配网,因为已经配网了(这不是bug嘛 呀嘞呀嘞daze)。既然已经配网,那就删除mesh网络信息,恢复一下。
发送命令55 aa 00 04 00 00 03,还是返回F0 55 AA 00 03 00 01 02 05 呃,什么意思




重新烧录固件(慎用)

放弃,进行固件重新烧录。参考:无需Telink也能烧录涂鸦BT3L
具体步骤可参考下面的
开发板固件烧录
烧完后,重新上电,打开 APP 添加设备,扫到 插座了!(扫不到 就 长按sw1 5秒(看你固件设置))

终于添加成功了,可喜可贺。

简单功能演示

TL_C2 接个小灯,配合APP,做个演示

次日,我想稍微改下固件,亮个LED2看看,结果


啥,心跳包呢???

开发板固件烧录

参考文档:https://developer.tuya.com/cn/docs/iot/authorization-code-firmware-burning?id=K9br41pefnksv
根据文档准备前期工作,https://iot.tuya.com/pmg/devpanels

1、随便创建了个产品

https://iot.tuya.com/pmg/list

2、生成授权码

https://iot.tuya.com/pmg/devpanels

然后绑定刚才创建的产品(插座),授权码也有了

3、运行 云模组烧录授权平台


设置相关参数


上图勾选“固件下载”,会下载固件到本地文件夹。 C:\\Users\\用户名\\AppData\\Roaming\\Tuya\\TYDA\\bin

4、使用USB转TTL 烧录固件(自行考虑是否这么使用吧)

注意:BT3L烧录据客服说需要泰凌微的烧录器。这卖200多,显然有些肉疼。
参考:无需Telink也能烧录涂鸦BT3L,配合安信可的烧录工具,加上USB转TTL也可以完成烧录(SWS 和 RX短接),然后在根据教程完成授权。(不得不说,安信可 yyds)

烧录固件 C:\\Users\\用户名\\AppData\\Roaming\\Tuya\\TYDA\\bin这个目录下面(这个固件生成需要前面的 设置中 勾选“固件下载”)

设置为 只授权

然后选择串口 运行

Arduino 例程

打开 Arduino IDE,导入涂鸦SDK,“文件”-》“示例”-》涂鸦SDK里面有相关示例

ble_led 例程(测试没啥用)

源码

/*
 * @FileName: led.ino
 * @Author: Tuya
 * @Email: 
 * @LastEditors: Tuya
 * @Date: 2021-10-22 10:41:27
 * @LastEditTime: 2021-10-27 19:48:31
 * @Copyright: HANGZHOU TUYA INFORMATION TECHNOLOGY CO.,LTD
 * @Company: http://www.tuya.com
 * @Description: This demo is based on the Arduino UNO, and the LEDs on the UNO board are controlled by the Tuya Smart App. 
 *               Enter network connection mode when Pin7 to GND.
 * @Github:
 */

#include <TuyaBLE.h>
#include <SoftwareSerial.h>

TuyaBLE my_device;


/* Current LED status */
unsigned char led_state = 0;

/* Data point define */
#define DPID_SWITCH_LED 1


/* Stores all DPs and their types. PS: array[][0]:dpid, array[][1]:dp type. 
 *                                     dp type(TuyaDefs.h) : DP_TYPE_RAW, DP_TYPE_BOOL, DP_TYPE_VALUE, DP_TYPE_STRING, DP_TYPE_ENUM, DP_TYPE_BITMAP
*/
unsigned char dp_array[][2] =

    DPID_SWITCH_LED, DP_TYPE_BOOL,
;

unsigned char pid[] = "jxcevwfq";
unsigned char mcu_ver[] = "1.0.0";

/* last time */
unsigned long last_time = 0;

void setup() 

  // Serial.begin(9600);
  Serial.begin(9600);

  //Initialize led port, turn off led.
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);

  //Enter the PID and MCU software version
  my_device.init(pid, mcu_ver);
  //incoming all DPs and their types array, DP numbers
  my_device.set_dp_cmd_total(dp_array, 1);
  //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();


void loop() 

  my_device.uart_service();

  /* LED blinks when network is being connected */
  if ((my_device.mcu_get_ble_work_state() != BLE_CONNECTED) && (my_device.mcu_get_ble_work_state() != BLE_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);
    
  
  
  delay(10);


/**
 * @description: DP download callback function.
 * @param unsigned char dpid
 * @param const unsigned char value
 * @param unsigned short length
 * @return unsigned char
 */
unsigned char dp_process(unsigned char dpid,const unsigned char value[], unsigned short length)

  switch(dpid) 
    case DPID_SWITCH_LED:
      led_state = my_device.mcu_get_dp_download_data(dpid, value, length); /* Get the value of the down DP command */
      if (led_state) 
        //Turn on
        digitalWrite(LED_BUILTIN, HIGH);
       else 
        //Turn off
        digitalWrite(LED_BUILTIN, LOW);
      
      //Status changes should be reported.
      my_device.mcu_dp_update(dpid, value, length);
    break;

    default:break;
  
  return TY_SUCCESS;


/**
 * @description: Upload all DP status of the current device.
 * @param *
 * @return *
 */
void dp_update_all(void)

  my_device.mcu_dp_update(DPID_SWITCH_LED, led_state, 1);

编译烧录

拔掉 BT3L开发板!!!,给Uno3烧写了 ble_led

不过这个程序没写啥内容,模块配网一直失败,呃,没啥用呀 不要了。

拓展

涂鸦蓝牙mesh模块BT3L+步进电机+Arduino

实现手机控制 电机转动,带动小装置控制 模拟按压开关

效果图


源码

unsigned int forward[4] = 0x03,0x06,0x0c,0x09; // 正转
unsigned int reverse[4]= 0x03,0x09,0x0c,0x06; // 反转
int IO_array[4] = 8, 9, 10, 11;
int flag = 0;
int temp = 0;
int ble_in = 7;

void SetMotor(unsigned int InputData)

  if(InputData == 0x03)
  
    digitalWrite(8, HIGH);
    digitalWrite(9, HIGH);
    digitalWrite(10, LOW);
    digitalWrite(11, LOW);
  
  else if(InputData == 0x06)
  
    digitalWrite(8, LOW);
    digitalWrite(9, HIGH);
    digitalWrite(10, HIGH);
    digitalWrite(11, LOW);
  
  else if(InputData == 0x09)
  
    digitalWrite(8, HIGH);
    digitalWrite(9, LOW);
    digitalWrite(10, LOW);
    digitalWrite(11, HIGH);
  
  else if(InputData == 0x0c)
    
    digitalWrite(8, LOW);
    digitalWrite(9, LOW);
    digitalWrite(10, HIGH);
    digitalWrite(11, HIGH);
  
  else if(InputData == 0x00)
  
    digitalWrite(8, LOW);
    digitalWrite(9, LOW);
    digitalWrite(10, LOW);
    digitalWrite(11, LOW);
  


/*
  功能:转1/64圈
  步距角5.625 360/5.625=64 减速比1/64
  故64*64个脉冲转一圈
  n 圈数
  _direction 方向 1正转 非1反转
  delay_ms delay_ms >= 2
*/
void motor_circle(int n, int _direction, int delay_ms)

  int i, j;
  for(i = 0; i < n * 8; i++)
  
    for(j = 0; j < 4; j++)
    
      if(1 == _direction)
      
        SetMotor(0x00);
        SetMotor(forward[j]);
      
      else
      
        SetMotor(0x00);
        SetMotor(reverse[j]);
      

      delay(delay_ms > 2 ? delay_ms : 2);
    
  


void setup() 
  // put your setup code here, to run once:
  int i = 0;
  for( i = 0 ; i < 4 ; i++ )
  
    pinMode(IO_array[i], OUTPUT);
  
  pinMode(ble_in,INPUT); //定义蓝牙控制信号脚为输入接口


void loop() 
  //    电机正转半圈
  //    motor_circle(32, 1, 2);
  //    电机反转半圈
  //    motor_circle(32, 0, 2);
  temp = digitalRead(ble_in);//读取数字7 口电平值赋给temp
  // temp和上一次的flag不同 则执行电机正反转
  if(temp != flag)
  
    flag = temp;
    motor_circle(8, 1, 2);
    delay(500);
    motor_circle(8, 0, 2);
  
  
  delay(1000);

以上是关于涂鸦三明治BLE SoC 主控板(BT3L) 使用记录的主要内容,如果未能解决你的问题,请参考以下文章

涂鸦三明治BLE SoC 主控板(BT3L) 使用记录 + APP远控步进电机例程

涂鸦Wi-Fi&BLE SoC开发幻彩灯带

涂鸦Wi-Fi&BLE SoC开发幻彩灯带

涂鸦智能三明治音视频核心板(BK7256)开箱测评

涂鸦智能三明治音视频核心板(BK7256)开箱测评

涂鸦智能三明治音视频核心板(BK7256)开箱测评