Milkv-duo/duo256/duos 接入tuya 云并实现远程智能控制

tuyaopen-embedded-core 是将 https://github.com/tuya/tuyaopen 连接 tuya 云相关核心组件重新组织,可快速嵌入至各种嵌入式平台使用。

tuyaopen-embedded-core 可通过 WiFi、有线以太网、CAT-1、4G 等多种方式接入涂鸦云,实现设备远程控制、OTA 等功能

下载源码并编译

使用 https://github.com/flyingcys/tuyaopen-embedded-core 仓库代码下载到本地。

$ git clone https://github.com/flyingcys/tuyaopen-embedded-core.git
$ cd tuyaopen-embedded-core
$ git submodule update --init --recursive

创建产品并获取PID

参考文档 https://developer.tuya.com/cn/docs/iot-device-dev/application-creation?id=Kbxw7ket3aujchttps://iot.tuya.com 下创建产品,并获取到创建产品的 PID 。

该 PID 对应 TUYA_PRODUCT_ID,采用环境变量形式加入编译。

$ export TUYA_PRODUCT_ID=qhivvyqawogv04e4

PID 为 qhivvyqawogv04e4 该设备为智能插座,开发者可自由创建其他产品。

获取 UUID/Authkey

请根据 https://github.com/tuya/tuyaopen/blob/master/apps/tuya_cloud/README_zh.md 介绍方式获取 TUYA_OPENSDK_UUIDTUYA_OPENSDK_AUTHKEY

通过环境变量形式加入编译:

$ export TUYA_OPENSDK_UUID=uuidxxxxxxxxxxxxxxxx
$ export TUYA_OPENSDK_AUTHKEY=keyxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

请使用正确的 PID/UUID/Authkey,否则无法正常连接涂鸦云。

编译

  • 安装依赖
$ sudo apt-get install -y cmake ninja-build
  • 编译

目前 tuyaopen-embedded-core 内置了部分硬件平台交叉编译工具,其他硬件平台可自行修改对应的 toolchain.cmake 文件。

  1. 确定 toolchain

在 milkv-duo256m 终端上运行以下命令确认 toolchain

$ cat /proc/version
Linux version 5.10.4-tag- (root@06883d61fb65) (riscv64-unknown-linux-musl-gcc (Xuantie-900 linux-5.10.4 musl gcc Toolchain V2.6.1 B-20220906) 10.2.0, GNU ld (GNU Binutils) 2.35) #1 PREEMPT Thu Aug 1 13:53:00 CST 2024

使用的是 riscv64-unknown-linux-musl-gcc

  1. 编译
$ cd demos/switch_demo
$ cmake -DCMAKE_TOOLCHAIN_FILE="../../boards/sg200x/toolchain_sg200x_rv64_musl.cmake" -S . -B build -G "Ninja"
$ ninja -C build

编译完成后的文件位于 build/switch_demo 目录下。

上传与运行

通过 scp 将编译后的文件上传到 milkv-duo256m 开发上。

$ scp build/switch_demo root@192.168.188.40:/root/

运行

在 milkv-duo256m 终端上执行:

$ chmod +x switch_demo
$ ./switch_demo

此时运行可能会出现错误:

$ ./switch_demo
-sh: ./switch_demo: not found

该错误是因为缺少动态链接库,需要拷贝到 /lib 目录下,可通过以下方式解决。

  1. 使用 file 命令查看 switch_demo 文件,查看对应的动态链接库。
$ file switch_demo
switch_demo: ELF 64-bit LSB executable, UCB RISC-V, version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-riscv64xthead.so.1, with debug_info, not stripped
  1. 拷贝动态链接库到 /lib 目录下

该文件对应的动态链接库位于 riscv64-linux-musl-x86_64/sysroot/usr/lib64xthead/lp64d

$ scp riscv64-linux-musl-x86_64/sysroot/usr/lib64xthead/lp64d/libc.so root@192.168.188.40:/lib
  1. 重新运行

并在 milkv-duo256 上执行:

$ ln -s /lib/libc.so /lib/ld-musl-riscv64xthead.so.1
$ ./switch_demo

当前示例采用有线网络连接,使用二维码扫描方式连接涂鸦云,第一次连接时会弹出二维码。

使用涂鸦 APP 点击右上角 + 后,选择 扫一扫,扫描二维码后,设备通过自动激活设备,并与当前用户绑定。

运行成功后,通过涂鸦 APP 控制设备。

接下来可以根据 demo 的功能进行扩展,实现各种自己的功能。

当前示例在milkv-duo 系列板子上通过有线连接,同样 tuyaopen-embedded-core 适用于所有可以直接连接互联网的设备。