SomfyDuino IO
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要的工具和机器
|
关于这个项目
构思
你好,
我只是尝试使用 Arduino Nano 实现一个 USB 到 Somfy IO 适配器,以在客厅中包含我的卷帘。我想连接到我的 DIY 家庭自动化系统,而无需从原始供应商那里获得任何基于云的硬件 - 嘿!它有效 - 仅使用一个简单的 IO 遥控器。
你需要:
- 尚飞 IO 遥控器 - 我使用了 GX037。
- 几乎任何带有 USB 连接器的 Arduino 都可以 - 但软串口也可以。
- 一根七芯扁平电缆和一根收缩软管,用于整齐包装。
根据附件接线。遥控器通过 Arduino 供电 - 它在发送时使用大约 20mA,所以你应该非常好。所以一定要取出电池。
关于代码:
如果您想将整个装置连接到例如RPi,您可能需要考虑删除所有 Serial.print 项目 - 如果它只是倾听并关闭,则与 Arduino 通信会更容易。
代码中解释了如何发送命令。
玩得开心 - 欢迎评论!
干杯,
比约恩
附言- 我使用了单通道遥控器。它基本上使用与 5 通道遥控器相同的布局,但缺少某些部件(如附加 LED)。我想知道如果触发 SELECT 是否会跳转到不同的频道。我还没有尝试过,因为我很高兴我有一个频道可以工作,但我会保持更新
P.P.S.刚刚检查 - 不幸的是,选择按钮现在有效 - 不会改变频道,但也不会搞砸遥控器。
代码
- 串行到尚飞
串行到尚飞Arduino
// SomfyDuino// by Bjoern Foldenauer// 05/2017int progPin =8;int upPin =12;int downPin =10;int myPin =11;int selectPin =9;int ledPin =13;boolean upPress =false; boolean downPress =false;boolean myPress =false;boolean progPress =false;boolean selectPress =false;unsigned long holdTime =0;int repeatSend =0;charcomingChar;void setup() {Serial.begin(9600); Serial.println("SomfyDuino 0.71"); Serial.println("Bjoern Foldenauer"); Serial.println("-----"); Serial.println("接收单个串行字符,如:"); Serial.println("u - 准备按 UP"); Serial.println("d - 准备按下 DOWN"); Serial.println("m - 准备按我的"); Serial.println("p - 准备按 PROG"); Serial.println("s - 准备按SELECT"); Serial.println("r - 发送计数加一"); Serial.println("任意数字X - 将保持时间增加X*100 ms"); Serial.println("e - 执行!运行定义的(多按钮)按住"); /erial.println(""); Serial.println("例子:普通UP:u5e"); Serial.println(" 3 秒 UP/DOWN:ud9993e "); Serial.println(" 5 秒 PROG:p999995e "); Serial.println(""); pinMode(progPin, 输出); pinMode(upPin, OUTPUT); pinMode(downPin, OUTPUT); pinMode(myPin, OUTPUT); pinMode(ledPin,输出); pinMode(selectPin, OUTPUT);数字写入(编针,高);数字写入(upPin,高);数字写入(下销,高);数字写入(myPin,高);数字写入(选择引脚,高); digitalWrite(ledPin, LOW);}void loop() { while (Serial.available() ==0) { delay(50); } } // 等到串行命令进来 if (Serial.available()> 0) {comingChar =Serial.read(); Serial.println(incomingChar); if (incomingChar =='u') {upPress =true;} if (incomingChar =='d') {downPress =true;} if (incomingChar =='m') {myPress =true;} if (incomingChar =='p') {progPress =true;} if (incomingChar =='s') {selectPress =true;} if (incomingChar =='1') {holdTime +=100;} if (incomingChar =='2') {holdTime +=200;} if (incomingChar =='3') {holdTime +=300;} if (incomingChar =='4') {holdTime +=400;} if (incomingChar =='5') {holdTime +=500;} if (incomingChar =='6') {holdTime +=600;} if (incomingChar =='7') {holdTime +=700;} if (incomingChar =='8') {holdTime +=800;} if (incomingChar =='9') {holdTime +=900;} if (incomingChar =='r') {repeatSend++;} if (incomingChar =='e') {somSend();} }}void somSend() { Serial.print("Pressing:"); for(int i=0; i <=repeatSend; i++) { if (upPress) {digitalWrite(upPin, LOW); Serial.print("up");} if (downPress) {digitalWrite(downPin, LOW); Serial.print("down");} if (myPress) {digitalWrite(myPin, LOW); Serial.print("my");} if (progPress) {digitalWrite(progPin, LOW); Serial.print("prog");} if (selectPress) {digitalWrite(selectPin, LOW); Serial.print("select ");} digitalWrite(ledPin, HIGH); Serial.print("for "); Serial.print(holdTime); Serial.println("毫秒");延迟(保持时间);数字写入(编针,高);数字写入(upPin,高);数字写入(下销,高);数字写入(myPin,高);数字写入(选择引脚,高);数字写入(ledPin,低);延迟(保持时间); } upPress =false; downPress =false; myPress =假; progPress =假; selectPress =false;保持时间 =0;重复发送 =0; Serial.println("完成。");}
示意图
没有文件。
制造工艺