红外遥控和舵机控制通过 涂鸦智能 App 下发 打开空调 指令控制红外发射模块发射指令打开格力空调,下发 开/关门 指令控制舵机实现开关门功能。
适用于涂鸦 IoT 自定义方案中,照明、台灯、灯 丝灯、调光器、照明遥控器、排插、开关、家电、运动健康、传感类产品原型。
一款无线发射与接收装置,能学习中心频率为37.9KHz 的红. 外信号,通过控制红外发射管的通断来达到控制红外设备的目的。
一个开发各类设备,让您比台式电脑更能充分感知和控制物理世界的生态系统。
适用于电机驱动、应用控制、医疗和手持设备、PC 和游戏外设、GPS 平台、工业应用、PLC、变频器、打印机、扫描仪、报警系统、视频对讲和 HVAC 等应用。
在 涂鸦 IoT 平台 上创建一款 万能遥控器 产品,开发方案选择自定义方案。
输入产品名称,型号,选择 Wi-Fi +蓝牙+IR方案,标准功耗。
创建产品后,添加功能定义。由于要控制舵机开锁,需要添加一个布尔型功能点,填写一个较规范的标识符。因为是通过标识符控制功能的实现。
说明:定时功能是云端实现,不需要写代码,可添加可不添加,我是想实现定时关闭空调所以添加了定时功能。
在 硬件开发,选择 WB3S Wi-Fi &BLE 双协议模组。在开发资料下载区域,下载开发资料。
MCU SDK:涂鸦的 MCU 开发代码包。可以移植到 Arduino Uno/Nano 最小系统。Uno 和 Nano 使用一样的芯片,代码一样,只是在 Arduino 下载的时候选择对应的开发板即可。同样,MCU SDK 也被移植到 STM32f103c8t6 最小系统板,并采用 Keil 开发。在 STM 32 和 Arduino 都成功与模组通信后,按下设备按键进入配网模式。
涂鸦模组调试助手:可以模拟 MCU 和模拟模组。
功能点调试文件:以 .json
结尾的文件。可以使用涂鸦模组调试助手需导入 DP 文件,即为这个文件。
在下载资料中安装 涂鸦模组调试助手。我的电脑是 Windows 10 直接安装即可,如果是 Windows 7 系统,则需安装 NET4.6.1 框架。使用方式详情请参考 涂鸦模组调试助手 。我拿到的是三明治开发板里的 TYDE5-WB3S-MCU-1 Wi-Fi 板,涂鸦已经把 MCU 通用对接的固件已经烧录好了,无需再烧录固件。所以直接在调试助手里选择 MCU模拟,选择串口端口号(端口号查看:右键我的电脑->设备管理器->端口),波特率选择 115000。导入之前下载的 功能点调试文件。
点开 初始化配置,点击 开始调试 按钮。即可看到在调试窗口的模组心跳信息。
<!---->
之后就可在 操作 栏,使用相关指令。本小节简单描述下配网操作。
点击 AP配网,在调试窗口就可看到 Wi-Fi 模组进入AP配网模式。
在手机端打开 涂鸦智能 APP,点右上角 + 号,选择自动发现,就可添加到 Wi-Fi 模组,按提示配网即可。
成功配网后,在涂鸦模组调试助手里查看 Wi-Fi 模组是否已成功连接路由器,且连接到涂鸦 IoT 云端。
在涂鸦智能 App 里尝试操作设备,然后在调试助手里查看是否有 MQTT 协议的云端下发数据。
舵机,故名思议,像船尾的舵那样,只能转动固定的角度,一般的舵机最大转角约为 180 度。也有一些舵机能达到 300 度的。使用 Arduino Uno 控制板控制舵机之前您可以参考以下资料。
将PPM信号,经信号线传输。 PPM信号的频率是50HZ。宽度从0.5MS到2.5MS。具体用到的代码如下所示:
//引入头文件
#include <Servo.h> //调用舵机函数库
Servo myservo;
//初始化舵机控制脚为D6
myservo.attach(6); //定义数字第6脚为舵机控制引脚
//写入舵机角度,0~180度
myservo.write(120); //写入舵机角度
红外发射参考链接:
红外接收代码,此代码不能用于控制空调:
//本例来自于红外接收模组的IRremote自带范例
//已经作出了修改
/*电路连接
*红外接收器的VOUT接在数字引脚3上
*效果,当遥控器按下按键时电脑的串口会出现按键的命令编码.
*/
#include <IRremote.h> //加载头文件,红外的库需自己导入
int RECV_PIN = 3; //定义红外接收器的引脚为3
int a=0;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(115200); //串口波特率115200
irrecv.enableIRIn(); //初始化红外接收器
}
void loop()
{
if (irrecv.decode(&results))
{
Serial.print("IR DATA IS:");
Serial.println(results.value);
irrecv.resume(); // 接收下一个值
}
delay(100);
}
使用上述代码,读出空调遥控器红外码,开空调:2425357322,关空调:2156921866。
红外控制空调
上述代码适合普通红外解码和发送,不适合空调,多数空调遥控器编码都是100位以上,甚至200位。
再看看 IRremote 库能接收多少位,在 IRremote.h
文件中你可以找到如下语句:
// [mw_shl_code=cpp,true]'#define RAWBUF 100
// Length of raw duration buffer[/mw_shl_code] 设置成 100 位过于偏低,可以修改成
[mw_shl_code=cpp,true]#define RAWBUF 255[/mw_shl_code]
红外控制空调代码主要参考下面的链接。已测试可以成功打开格力空调,但关闭空调部分的代码有问题。
Arduino控制格力空调:http://bbs.mydigit.cn/read.php?tid=2103622
在涂鸦创建产品后,有生成 MCU SDK 包,在 Arduino 中导入 MCU SDK 包,然后按下方更改即可。
//(1)#error "请将MCU串口发送函数填入该函数,并删除该行"
Serial.write(value);
//(2)#error " 请在main函数中添加wifi_protocol_init()完成wifi协议初始化,并删除该行"
//添加wifi_protocol_init();
void setup()
{
wifi_protocol_init(); //wifi协议初始化
}
//(3)#error "请在串口接收中断中调用uart_receive_input(value),串口数据由MCU_SDK处理,用户请勿再另行处理,完成后删除该行"
//创建serialEvent()函数,实现串口接收
void serialEvent()
{
if (Serial.available())
{
unsigned char ch = (unsigned char)Serial.read();
uart_receive_input(ch);
}
}
//在setup()函数里调用serialEvent();
void setup()
{
serialEvent(); //串口接收处理
}
//(4)#error "请直接在main函数的while(1){}中添加wifi_uart_service(),调用该函数不要加任何条件判断,完成后删除该行"
//添加wifi_uart_service();
void loop()
{
wifi_uart_service(); // Wi-Fi 串口
}
//(5)还需要在变量申明处去掉const ,否则会报错
//const DOWNLOAD_CMD_S download_cmd[] =
DOWNLOAD_CMD_S download_cmd[] =
{
{DPID_OPENSW, DP_TYPE_BOOL},
{DPID_OPENKT, DP_TYPE_BOOL},
};
上述工作完成后,基本问题已解决。可在涂鸦模组调试助手测试。测试界面如下:导入 DP 文件(即 .JSON
文件),波特率设置为 115200。
涂鸦物联网开发平台为开发者提供了便捷的 IoT 开发工具与服务,助力开发者更高效的完成设备接入,并为开发者提供物联网应用开发及场景服务能力。