一、实现的功能描述
App远程控制开发板上控制电机的PWM信号占空比,以达到控制电机转速的目的。并将App下发的PWM占空比值显示在OLED屏幕上。
二、 UI配置描述
本例程中所包含的UI配置代码如下:
- UI = "[5_MotorPWM_%_0_100]"
例程中用了类型为 “5” 的控件,该类控件用来通过App下发控制量给设备,控制范围为0-100,单位为%。关于该类型控件的具体描述可以参看官网中关于ShineBlink云的教程。
基于以上UI配置,当设备上电后,我们在小程序中可以看到系统为我们自动生成的小程序页如下:
三、本实验教学目的
掌握基于ShineBlink的:
- 基于WiFi或4G接入ShineBlink免开发云,也可以轻松的接入机智云物联网平台,并自动生成微信小程序
- PWM信号控制电机(电机的PWM控制引脚为D0)
- OLED屏幕显示(OLED屏幕占用SCL1和SDA1引脚)
四、本实验涉及的模块
电机在开发板上的位置如下:
五、完整源代码(WiFi版本)
- --配置D0口为PWM功能,参数20000表示PWM的周期为20ms,参数1表示高电平有效
- LIB_PwmConfig1(20000,1)
- LIB_PwmUpdate1(0) --电机默认停止转动
- --设置0.96寸oled模块占用的IIc1接口,用来显示电压和PWM占空比
- LIB_0_96_OledConfig("IIC1")
- --设置UI配置,该配置决定了小程序页面显示的控件具体有哪些什么,名字是什么
- UI = "[5_MotorPWM_%_0_100]"
- --设置C2开发板自带的WiFi连接云
- ssid = "abcdef" --修改成您的WiFi路由器账号
- pswd = "123456" --修改成您的WiFi路由器密码
- LIB_CloudConfig("S0", "WIFI_C2", 0, "SBK_01", UI, ssid, pswd)
- --显示控制电机的默认占空比
- LIB_0_96_OledPuts("1","1",string.format("PWM:%03d%%", 0))
- while(GC(1) == true)
- do
- --查询是否收到服务器下发的数据
- recv_flag, msg = LIB_CloudRecv()
- if recv_flag == 1 then
- --查看服务器是否下发控制电机PWM占空比的指令
- if string.find(msg, "MotorPWM") ~= nil then
- Json_Val = LIB_JsonParse(msg, "$.MotorPWM")
- --将解析出来的字符串转换成数字
- val = tonumber(Json_Val)
- if val ~= nil then
- if val <= 100 and val >= 0 then
- --通过设置D0口输出的PWM有效电平宽度来控制电机震动强度
- LIB_PwmUpdate1(val*200)
- --显示控制电机的占空比
- LIB_0_96_OledPuts("1","1",string.format("PWM:%03d%%", val))
- end
- end
- end
- end
- end
注意:本例程使用的是 C2 DevKit 开发板上的震动电机,所以使用前需要将开发板上的黄色跳线帽跳至MOT选项。
六、实验现象
将上面代码中的ssid和pswd改成您的路由器账号和密码,然后将代码复制到开发板中并运行十几秒之后,我们用微信扫描开发板背后的二维码,在弹出的微信小程序中我们就可以远程控制开发板上的电机的转速(震动强度)。
七、4G版本
4G版本和WiFi版本的代码几乎一样,我们只需做如下两处调整即可实现4G远程:
(1)将4G模块插入开发板上的4G插槽,如下图:
(2)将代码中WIFI初始化改成4G初始化即可,调整如下:
将原来WiFi的:
- --设置C2开发板自带的WiFi连接云
- ssid = "abcdef" --修改成您的WiFi路由器账号
- pswd = "123456" --修改成您的WiFi路由器密码
- LIB_CloudConfig("S0", "WIFI_C2", 0, "SBK_01", UI, ssid, pswd)
调整成4G后的:
- --设置外部4G模块连接云
- LIB_CloudConfig("S0", "4G_ML302", 0, "SBK_01", UI, "NO_GPS")