W800上手 Part.1 点个RGB

W800上手 Part.1 点个灯

笔者前些日子找实习,能力达标测评是用W800做一个智能灯Demo,做完自觉有点意思,并且网上关于W800开发的资料少之又少,遂写篇文章记录一下。

1 开发环境配置

不知道为啥平头哥官方最近关闭了开发者社区的下载功能,CDS/CDK都很难找到下载,遂使用WSL + YoC Tool + VSCode的方案,这也比较符合笔者的开发习惯(万物皆可VSCode),首先在WSL中安装python3, git和pip,并安装ccls, make和bear用于管理工程 + 提供语言支持(VSCode中需要预先安装ccls插件)

sudo apt-get install python3-pip python-is-python3 git bear ccls make

然后从清华大学源安装yoctools

sudo pip3 install yoctools -i https://pypi.tuna.tsinghua.edu.cn/simple

然后为yoctools安装csky工具链

sudo yoctools toolchain --csky

至此,W800开发环境的配置就算大功告成

2 Let’s coding

2.1 先点个呼吸灯吧

有了开发环境之后干的第一件是当然是点灯啦(bushi),笔者拿到的板子是海凌科的,板载了一颗RGB LED,于是第一个Demo就是三色呼吸灯。

2.1.1 创建工程 & 开始编写代码

mkdir W800Demo && cd W800Demo
yoc init && yoc install -b v7.4.3 helloworld_w800
cd solutions/helloworld_w800
bear make -j
code .

注意:这里有个非常坑的点,w800的sdk所依赖的csi和aos之类的官方组件全部是v7.4.3,虽然w800相关的库和工程master版本都是v7.4.3,但如果不指定工程的版本为v7.4.3就会导致依赖版本被设定为master,最后无法通过编译

2.1.2 正式开始点灯

W800的驱动代码在这个仓库,需要参考代码的可以去翻翻,(吐槽一下联胜德的软件,基本啥文档没有,全靠自己硬看代码)。
在main函数中添加PWM初始化代码(main在app/src/main.c中)

drv_pinmux_config(PB0, PB0_PWM);    // Blue
drv_pinmux_config(PB1, PB1_PWM);    // Red
drv_pinmux_config(PB2, PB2_PWM);    // Green
pwm_handle_t RedPwmHandle, GreenPwmHandle, BluePwmHandle;
BluePwmHandle = csi_pwm_initialize(0);  // Channel 0 For Blue
RedPwmHandle = csi_pwm_initialize(1);   // Channel 1 For Red
GreenPwmHandle = csi_pwm_initialize(2); // Channel 2 For Green

然后就是放飞自我的点灯代码了(别骂了,几分钟糊出来的)

uint8_t RGB[3] = {0}, Status[3] = {0, 1, 1};
// Status 0 for brightness increase
// Status 1 for brightness hold on
// Status 2 for brightness decrease
while(1) {
    // main loop
    printf("Red Brightness: %d, Green Brightness: %d, Blue Brightness: %d", 100 - RGB[0], 100 - RGB[1], 100 - RGB[2]);
    if(Status[0] != 1){
        if(Status[0] == 0 && RGB[0] > 0) {
            RGB[0] --;
        }
        if(Status[0] == 2 && RGB[0] < 100) {
            RGB[0] ++;
        }
        if(Status[0] == 0 && RGB[0] == 0) {
            Status[0] = 2;
        }
        if(Status[0] == 2 && RGB[0] == 100) {
            Status[0] = 1;
            Status[1] = 0;
        }
        // Red Channel Control
        csi_pwm_config(RedPwmHandle, 1, 100, 100 - RGB[0]);
    }
    if(Status[1] != 1) {
        if(Status[1] == 0 && RGB[1] > 0) {
            RGB[1] --;
        }
        if(Status[1] == 2 && RGB[1] < 100) {
            RGB[1] ++;
        }
        if(Status[1] == 0 && RGB[1] == 0) {
            Status[1] = 2;
        }
        if(Status[1] == 2 && RGB[1] == 100) {
            Status[1] = 1;
            Status[2] = 0;
        }
        csi_pwm_config(GreenPwmHandle, 2, 100, 100 - RGB[1]);
    }
    if(Status[2] != 1) {
        if(Status[2] == 0 && RGB[2] > 0) {
            RGB[2] --;
        }
        if(Status[2] == 2 && RGB[2] < 100){
            RGB[2] ++;
        }
        if(Status[2] == 0 && RGB[2] == 0) {
            Status[2] = 2;
        }
        if(Status[2] == 2 && RGB[2] == 100){
            Status[2] = 1;
            Status[0] = 0;
        }
        csi_pwm_config(BluePwmHandle, 0, 100, 100 - RGB[2]);
    }
}

到这我们的灯就算点起来了,在helloworld_w800文件夹下执行

bear make -j
sudo cp out/helloworld_w800/yoc_total.fls /mnt/d

就会发现D盘根目录下面多了个yoc_total.fls文件
(需要放到别处自行修改/mnt/后面的路径为/mnt/盘符/路径,这个是WSL1的文件系统特色,具体参考MS官方资料)
然后,用联胜德的Upgrade Tool通过串口把固件烧录到板子里即可

Part1附录

  1. HLK W800开发板资料
  2. YoC Tools 用户手册
  3. YoC 组件官方仓库地址

发表评论