文章目录
- 可以使用开关量或者模拟量输出控制风扇。业务代码如下【完整刚才见附件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); }} 控制原理图:
- 视频:smart fan demo。 一
- 到此,我们打通碰一碰开发道路,接下来可以实现更多有趣的项目。例如控制台灯、机器人。 下面展示本人前不久开发出的桌面机器人MRobot: 可以实现碰一碰连接、控制其移动、帮你开风扇、开门、浇水,甚至可以语音交互等,还有一些有趣的配件可供玩耍。总之HarmonyOS/OpenHarmony 万物互联,实现所想。 基本开发流程和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;} 想了解更多关于开源的内容,请访问: 51CTO 开源基础软件社区 https://ost.51cto.com。

可以使用开关量或者模拟量输出控制风扇。业务代码如下【完整刚才见附件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);
}
}
控制原理图:

视频:smart fan demo。
一
到此,我们打通碰一碰开发道路,接下来可以实现更多有趣的项目。例如控制台灯、机器人。
下面展示本人前不久开发出的桌面机器人MRobot:
可以实现碰一碰连接、控制其移动、帮你开风扇、开门、浇水,甚至可以语音交互等,还有一些有趣的配件可供玩耍。总之HarmonyOS/OpenHarmony 万物互联,实现所想。




基本开发流程和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;
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。