总结:涂鸦模块固件必须是通用固件支持的通用固件,并且能够适配两种波特率。 涂鸦智能将每个功能点抽象为一个数据点,数据点定义为布尔枚举值等不同类型。 指定通信协议上的事件。 调用报告设备状态函数注册,轮询串口数据以获取连接状态。
tuya-wifi-mcu-sdk-arduino-library 1 简介 2. 搭建 Arduino 环境 2.1 下载 Arduino sdk 3. SDK3.1 Arduino 开发环境1 TuyaUart 分析 - 处理与模块的串口通信(仅供了解) 3.2 TuyaTools - 工具的方法(仅供了解) 3.3 TuyaDataPoint - 处理数据节点(上传、下载) 3.4 TuyaWifi - Wi-Fi 网络相关操作流程。 关键内容 3.4.1 unsigned char TuyaWifi::init(unsigned char *pid, unsigned char *mcu_ver) - 初始化 3.4.2 void set_dp_cmd_total(unsigned char download_cmd_array[][2], unsigned char download_cmd_num) - 配置节点 3.4 我会的。 3 void mcu_set_wifi_mode(unsigned char mode) —— 网络分发模式 3.4.4 void dp_process_func_register(tuya_callback_dp_download _func) —— 发送回调注册 3.4.5 mcu_dp_update - 报告实际设备状态 3.4.6 dp_update_all_func_register - 报告设备状态函数注册 3.4.7 mcu_get_wifi_work_state - 获取 Wi-Fi 连接状态 3.4.8 void TuyaWifi::uart_service(void) - 串口轮询端口数据 4. 官方案例
1.简介
涂鸦MCU SDK Arduino库是基于涂鸦Wi-Fi通用对接方案开发的。 设备MCU通过串口连接Wi-Fi模块,实现设备联网。 涂鸦模块固件必须是通用固件,支持9600和115200两种波特率适配。
注意:
如何开发Arduino板+涂鸦模块 后期可以开发多个模块。 串口通信 2、Arduino 环境配置 2.1 下载 Arduino SDK 方法一:
https://gitee.com/ant_onio/tuya-wifi-mcu-sdk-arduino-library 点击下载并解压到计算机上的路径(本电脑->文档->Arduino->库)
方法2(推荐):
Arduino IDE ->工具- > 管理库-> 搜索tuya-> 安装最新版本
3、分析SDK
这种方法适合MCU+模块串口通信开发 记住,这是一种方法。
简单来说,Data始终是处理串口通信的,所以从另一个角度来说,模块内置了串口协议数据处理逻辑。
博兄弟看了一下代码:
3.1 TuyaUart——处理与模块的串口通信(刚懂)class TuyaUart{public: // 主要定义串口通信缓冲区的缓存大小。 volatile unsigned char wifi_uart_rx_buf[PROTOCOL_HEAD + WIFI_UART_RECV_BUF_LMT]; //串口数据处理缓冲区 volatile unsigned char wifi_uart_tx_buf[PROTOCOL_HEAD + WIFIR_UART_SEND_BUF_LMT]; //串口接收缓冲区 volatile unsigned char wifi_data_process_buf [PROTOCOL_HEAD + WIFI _DATA_PROCESS_LMT]; //串口发送缓冲区 TuyaUart(void ); ~TuyaUart(invalid); // 接收数据 unsigned char uart_receive_input(unsigned char data); void uart_receive_buff_input(unsigned Short data_len); with_data_rxbuff(void); // 发送发送数据 void uart_transmit_output(unsigned char value);ed char *in,无符号短len);无符号短set_wifi_uart_byte(无符号短dest,无符号短set_wifi_uart_buffer(无符号短dest,常量无符号char); *src, unsigned Short len); /* 串口设置 */ bool _isHWSerial; // 串口设置 void set_serial(HardwareSerial *serial); void set_serial(SoftwareSerial *serial); ; size_t write(char value); private: 易失性 unsigned char *rx_buf_in; 易失性 unsigned char *rx_buf_out; 3.2 TuyaTools - 工具类方法(刚刚了解) class TuyaTools{ (void); ~涂鸦工具(void); unsigned char hex_to_bcd(unsigned charr value_H, unsigned character value_L); // 计算字符串的长度 unsigned long my_strlen(unsigned char *str); // 设置字符串 void *my_memset(void *src, unsigned char ch, unsigned Short count);内存复制 void *my_memcpy(void *dest, const void *src, unsigned Short count); // 字符串复制 char *my_strcpy(char *dest, const char *src); // 字符串比较 int my_strcmp(char *s1, char *s2); // 将 int 转换为字节数组 void int_to_byte(unsigned long number, unsigned char value[4]); // 将字节数组转换为 int unsigned long 转换为 byte_to_int(const unsigned char value[4]); unsigned char get_check_sum( unsigned char *pack, unsigned Short Pack_len);private:}; 3.3 TuyaDataPoint - 处理数据节点(上传、发送) class TuyaDataPoint{public: // TuyaDataPoint(void); / 接下来发送节点数据 unsigned char mcu_get_dp_download_bool(const unsigned char value[], unsigned Short len); //上报节点数据 unsigned char mcu_dp_raw_update(unsigned char dpid, const unsigned char value[], unsigned Short len); unsigned char mcu_dp_value_update(unsigned char dpid, unsigned long value); dpid, const unsigned char value[], unsigned Short len); unsigned char mcu_dp_enum_update(unsigned char dpid, unsigned char value); unsigned char mcu_dp_fault_update(unsigned char dpid, unsigned long value);请注意差异。 DP是杜特点是数据点(又称DP点)的缩写,代表智能设备所具有的功能点。
涂鸦智能将每个功能点抽象为一个数据点,数据点定义为布尔型、枚举型、数值型等不同类型。 数据点具有读写属性。 例如,双向开关可以抽象为两个数据点。 每个数据点都是布尔值,可以取 True 或 False 值。 数据点可以读取和写入。 读就是获取开关的当前值,写就是改变开关的当前值。
DPID:指定通信协议中DP事件的ID。
节点类型:
#define DP_TYPE_RAW 0x00 //RAW类型#define DP_TYPE_BOOL 0x01 //bool类型#define DP_TYPE_VALUE 0x02 //值类型#define DP_TYPE_STRING 0x03 //字符串类型#define DP_TYPE_ENUM 0x04 //enum type#define DP_TYPE_BITMAP 0x05 //故障类型 3.4 TuyaWifi - 处理Wi-Fi网络相关操作,主要内容
使用该库在Arduino上进行编程开发时,Arduino工程文件中必须包含TuyaWifi.h头文件。
一般来说,很多SDK开发方式包括:
1、对象创建方法2、初始化init3、回调设置、信息注册寄存器、callbackHandler4、持续轮询和响应处理 3.4.1 unsigned char TuyaWifi ::init(unsigned char *pid, unsigned char *mcu_ver) ——初始化
PID是通过在涂鸦IoT平台中创建一个产品wifi类来获取的。通常长度为 16,mcu_ver 参数是软件版本号。
3.4.2 void set_dp_cmd_total(unsigned char download_cmd_array[][2], unsigned char download_cmd_num) - 配置节点
在涂鸦物联网平台上创建产品,并获取产品的 DP 点信息。
DP是Data Point的缩写,也称为DP点,代表智能设备所具有的功能点。
涂鸦智能将每个功能点抽象为一个数据点,数据点定义为布尔型、枚举型、数值型等不同类型。 数据点具有读写属性。 例如,双向开关可以抽象为两个数据点。 每个数据点都是布尔值,可以取 True 或 False 值。 数据点可以读取和写入。 读就是获取开关的当前值,写就是改变开关的当前值。
DPID:指定通信协议中DP事件的ID。
MCU SDK 必须能够识别您创建的 DP 点及其类型。
3.4.3 void mcu_set_wifi_mode(unsigned char mode) —— 网络分配模式/** * @description: MCU 设置 Wi-Fi 工作模式 * @param {unsigned char} mode: 输入模式 * 0(SMART_CONFIG) :进入 smartconfig 模式 * 1(AP_CONFIG):进入 AP 模式 * @return {*} */void TuyaWifi::mcu_set_wifi_mode(unsigned char mode); 3.4.4 void dp_process_func_register(tuya_callback_dp_download _func) - 发送回调注册
当APP控制设备时,相应的DP命令将从云端发送到设备。 设备解析数据后,针对下发的命令执行相应的操作。 。
下发命令的处理是通过回调函数调用的,所以需要注册处理函数。
伪代码:
//注册DP下载处理回调函数 my_device.dp_process_func_register(dp_process);/** * @description:DP下载处理回调函数。 * @param {unsigned char} dpid * @param {const unsigned char} 值 * @param {unsigned Short} 长度 * @return {unsigned char} */unsigned char dp_process(unsigned char dpid, const unsigned char value[], unsigned短长度){ switch (dpid) { case DPID_BOOL: DebugSerial.println("Bool 类型:"); /* PR 之后当您运行 download DP 命令时,应报告当前状态。 */ my_device.mcu_dp_Update(dpid_bool, dp_bool_value, 1); Case dpid_value: Debugserial.println("Type:"); dp_value_Value = My_device.mcu_get_dp_download_data(dpid_value, value, length); Debugserial.println(dp_value_value);处理下载 DP 命令时,应报告当前状态。 */ my_device.mcu_dp_update(DPID_VALUE, dp_value_value, 1); 案例 DPID_ENUM: DebugSerial.println( "Enumeration:");处理下载后您必须使用 DP 命令来报告当前状态。 */ my_device.mcu_dp_update(DPID_ENUM, dp_enum_value, 1); 销毁; case DPID_STRING: DebugSerial.println("字符串类型:") /* */ for (unsigned int i=0 ;i
评论前必须登录!
注册