【HarmonyOS Connect设备开发-个人】 4.南北打通-碰一碰互动-鸿蒙开发者社区-51CTO.COM

【HarmonyOS Connect设备开发-个人】 4.南北打通-碰一碰互动 原创 精华

Hello_Kun
发布于 2022-5-14 19:11
浏览
5收藏

4.南北打通-碰一碰互动

@toc

4.1 南向开发-风扇业务逻辑

可以使用开关量或者模拟量输出控制风扇。业务代码如下【完整刚才见附件smart_fan_iot.zip】:

static void WinderInit(void)
{
    IoTGpioInit(8);
    hi_io_set_func(8, HI_IO_FUNC_GPIO_8_PWM1_OUT);
    IoTPwmInit(1); // GPIO8 初始化为PWM 1 输出 可控速度

    IoTGpioInit(FAN_IO1);
    hi_io_set_func(FAN_IO1, HI_IO_FUNC_GPIO_2_GPIO);
    IoTGpioSetDir(FAN_IO1, IOT_GPIO_DIR_OUT);
    IoTGpioSetOutputVal(FAN_IO1,IOT_GPIO_VALUE0);  //GPIO2 初始化为输出 0  开关量
}

static void WinderLoop(void)
{
    while (1)
    {

        if (strcmp(app_msg, "turn on fan") == 0)
        {
             IoTGpioSetOutputVal(FAN_IO1,IOT_GPIO_VALUE1);
            IoTPwmStart(1, 95, 80000); // turn on fan
            printf("turn on fan \r\n");
        }
        if (strcmp(app_msg, "turn off fan") == 0)
        {
            IoTGpioSetOutputVal(FAN_IO1,IOT_GPIO_VALUE0);
            IoTPwmStop(1);// turn off fan
            printf("turn off fan \r\n");
        }
        if (strcmp(app_msg, "lower speed") == 0)
        {
            IoTPwmStart(1, 40, 80000); 
            printf("lower speed \r\n");
        }
        if (strcmp(app_msg, "medium speed") == 0)
        {
             IoTPwmStart(1, 75, 80000); 
             printf("medium speed \r\n");
        }
        osDelay(WINDER_LOOP_DELAY);
    }
}

控制原理图:
【HarmonyOS Connect设备开发-个人】 4.南北打通-碰一碰互动-鸿蒙开发者社区

4.2 Smart_fan演示

视频:smart fan demo
【HarmonyOS Connect设备开发-个人】 4.南北打通-碰一碰互动-鸿蒙开发者社区

4.3 碰一碰机器人demo

到此,我们打通碰一碰开发道路,接下来可以实现更多有趣的项目。例如控制台灯、机器人。
下面展示本人前不久开发出的桌面机器人MRobot:
可以实现碰一碰连接、控制其移动、帮你开风扇、开门、浇水,甚至可以语音交互等,还有一些有趣的配件可供玩耍。总之HarmonyOS/OpenHarmony 万物互联,实现所想。
【HarmonyOS Connect设备开发-个人】 4.南北打通-碰一碰互动-鸿蒙开发者社区
【HarmonyOS Connect设备开发-个人】 4.南北打通-碰一碰互动-鸿蒙开发者社区
【HarmonyOS Connect设备开发-个人】 4.南北打通-碰一碰互动-鸿蒙开发者社区
【HarmonyOS Connect设备开发-个人】 4.南北打通-碰一碰互动-鸿蒙开发者社区
基本开发流程和smart fan类似
控制UI核心代码:

 //运动控制
    Forward(){
        this.front_img='/common/images/up0.png';
        this.work_status ="萌萌退下";
        this.talk_msg = "F";
        this.sendMessage();
    },
    Backward(){
        this.front_img='/common/images/down0.png';
        this.work_status ="萌萌冲冲冲";
        this.talk_msg = "B";
        this.sendMessage();
    },
 //表情聊天
    Emoji_smile(){
        this.emoji ="微笑";
        this.talk_msg = "1";
       // this.sendMessage();
    },
    Emoji_wao(){
        this.emoji ="哇哦";
        this.talk_msg = "2";
        //this.sendMessage();
    },
 //秒控设备
    Control_fan(e)
    {
        var ret=0;
        console.log(e.checked);
        if( e.checked){
            this.talk_msg = "turn on fan";
            this.sendMessage();
            this.fan="/common/images/fanOn.png";
            prompt.showToast({
                message: "打开风扇"
            });
        }
        else{
            this.fan ="/common/images/fanOff.png";
            this.talk_msg = "turn off fan";
            this.sendMessage();
            prompt.showToast({
                message: "关闭风扇"
            });
        };
    },
    sendMessage(){
        var ret =1;
        var message = this.talk_msg;
        let commonInfo = {
            sessionId: getApp(this).ConfigParams.deviceInfo.sessionId
        };
        getApp(this).NetConfig.sendMessage(commonInfo, message, (result)=>{
                if(result.code==0)
                {
                    prompt.showToast({
                        message: "发送成功",
                        duration: 1000,
                    });
                ret =0;}
                else
                { prompt.showToast({
                        message: "发送失败",
                        duration: 1000,
                    });
               ret= -1;};
            });
        if(ret==0)
        {
            return 0;
        }
        else return -1;
    },

设备侧接收数据代码:

static void MRobotProcessAppMessage(const char *data, int data_len)
{
    if (data_len != MESSAGE_LEN)
    {
        strcpy(app_msg, data);
        // app_msg=data;
        printf("------app_msg:%s \r\n", app_msg);
        printf("----- data:%s\r\n", data);
        WINERR("data len invalid! \n");
        return;
    }
}

static int MRobotNetEventHandler(NET_EVENT_TYPE event, void *data)
{
    switch (event)
    {
    case NET_EVENT_CONNECTTED: // 网络连接成功
        m_netstatus = true;
        printf("m_netstatus:%d\n\n", m_netstatus); // 显示网络已连接
        break;
    case NET_EVENT_RECV_DATA:                                      // 接收到网络信息(FA发送的消息)
        MRobotProcessAppMessage((const char *)data, strlen(data)); // 处理对应的信息
        break;
    default:
        break;
    }
    return 0;
}

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
smart_fan_iot.zip 354.34K 45次下载
已于2022-5-19 01:02:16修改
4
收藏 5
回复
举报
1条回复
按时间正序
/
按时间倒序
红叶亦知秋
红叶亦知秋

楼主真是宝藏,感谢分享。

1
回复
2022-5-16 09:42:14
回复
    相关推荐