完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好,这是我的第一篇文章,所以我将简要介绍一下我是如何来到这里的。
在过去一个月左右的时间里,我对家庭自动化和语音控制有了一些了解。虽然我不是完全的计算机文盲,但我对任何类型的编码都没有什么经验。 我遇到了一些 ESP8266 的代码,让设备与 Alexa 一起工作,我将其闪存到 nodemcu 并且工作正常,但是它只能控制 2 个设备我编辑代码以控制 4 个设备我遇到的问题是 Alexa 只会发现3 台设备。 我使用的代码如下。任何关于为什么它不会发现第四个设备的建议将不胜感激 /* * Rui Santos #include #ifdef ESP32 #include #define RF_RECEIVER 13 #define RELAY_PIN_1 12 #define RELAY_PIN_2 14 #else #include #define RF_RECEIVER 5 #define RELAY_PIN_1 4 #define RELAY_PIN_2 14 #define RELAY_PIN_3 2 #define RELAY_PIN_4 15 #endif #include "fauxmoESP.h" #include #define SERIAL_BAUDRATE 115200 #define WIFI_SSID "BTHub6-CFR5" #define WIFI_PASS "RP3wpV9DcNMh" #define LAMP_1 "灯一" #定义 LAMP_2“灯二” #define LAMP_3“灯三” #define LAMP_2“灯四” fauxmoESP fauxmo; RCSwitch mySwitch = RCSwitch(); // Wi-Fi 连接 void wifiSetup() { // 将 WIFI 模块设置为 STA 模式 WiFi.mode(WIFI_STA); // 连接 Serial.printf("[WIFI] 连接到 %s ", WIFI_SSID); WiFi.begin(WIFI_SSID, WIFI_PASS); // Wait while (WiFi.status() != WL_CONNECTED) { Serial.print("."); 延迟(100); } Serial.println(); // 连接的! Serial.printf("[WIFI] 站模式, SSID: %s, IP 地址: %s\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str()); } void setup() { // 初始化串行端口并清理垃圾 Serial.begin(SERIAL_BAUDRATE); 序列号.println(); // Wi-Fi 连接 wifiSetup(); // LED pinMode(RELAY_PIN_1, OUTPUT); 数字写入(RELAY_PIN_1,高); 引脚模式(RELAY_PIN_2,输出); 数字写入(RELAY_PIN_2,高); 引脚模式(RELAY_PIN_3,输出); 数字写入(RELAY_PIN_3,高); 引脚模式(RELAY_PIN_4,输出); 数字写入(RELAY_PIN_4,高); mySwitch.enableReceive(RF_RECEIVER); // 中断 0 上的接收器 => 即 pin #2 // 默认情况下,fauxmoESP 在定义的端口上创建自己的网络服务器 // 对于 gen3 设备,TCP 端口必须为 80(默认为 1901) //必须这样做在调用 enable() fauxmo.createServer(true) 之前;// 不需要,这是默认值 fauxmo.setPort(80); // 这是 gen3 设备所必需的 // 一旦有 WiFi 连接,您必须调用 enable(true) // 您可以随时启用或禁用该库 // 禁用它将阻止设备被发现和切换 fauxmo .启用(真); // 您可以使用不同的方式调用 alexa 来修改设备状态: // “Alexa,打开灯二” // 添加虚拟设备 fauxmo.addDevice(LAMP_1); fauxmo.addDevice(LAMP_2); fauxmo.addDevice(LAMP_3); fauxmo.addDevice(LAMP_4); fauxmo.onSetState([](unsigned char device_id, const char * device_name, bool state, unsigned char value) { // 当接收到来自 Alexa 的命令时回调。 // 您可以使用 device_id 或 device_name 来选择要对其执行操作的元素(继电器、LED、...) // 状态是一个布尔值(开/关),值是 0 到 255 之间的一个数字(如果您说“将厨房灯设置为 50%”,您将在此处收到 128)。 // 只要记住这里不要拖得太久,这是回调,尽快退出。 // 如果你必须在这里做更多的事情,设置一个标志并在你的主循环中处理它。 Serial.printf("[MAIN] Device #%d (%s) state: %s value: %d\n", device_id, device_name, state ? "ON" : "OFF", value); 如果 ( (strcmp(设备名称, Serial.println(“继电器 1 由 Alexa 切换”); //digitalWrite(RELAY_PIN_1, !digitalRead(RELAY_PIN_1)); 如果(状态){ digitalWrite(RELAY_PIN_1,低); } else { digitalWrite(RELAY_PIN_1, HIGH); } } if ( (strcmp(device_name, LAMP_2) == 0) ) { // 这只是设置一个变量,主循环()做一些关于 Serial.println(“RELAY 2 switched by Alexa”); 如果(状态){ digitalWrite(RELAY_PIN_2,LOW); } else { digitalWrite(RELAY_PIN_2, HIGH); } } if ( (strcmp(device_name, LAMP_3) == 0) ) { // 这只是设置一个变量,主循环()对 Serial.println(“RELAY 2 switched by Alexa”)做一些事情; 如果(状态){ digitalWrite(RELAY_PIN_3,LOW); } else { digitalWrite(RELAY_PIN_3, HIGH); } } if ( (strcmp(device_name, LAMP_4) == 0) ) { // 这只是设置一个变量,主循环()做一些关于 Serial.println(“RELAY 4 switched by Alexa”); 如果(状态){ digitalWrite(RELAY_PIN_4,低); } else { digitalWrite(RELAY_PIN_4, HIGH); } } }); } 无效循环(){ // fauxmoESP 使用异步 TCP 服务器,但使用同步 UDP 服务器 // 因此,我们必须手动轮询 UDP 数据包 fauxmo.handle(); static unsigned long last = millis(); 如果 (millis() - last > 5000) { last = millis(); Serial.printf("[MAIN] 空闲堆:%d 字节\n", ESP.getFreeHeap()); } if (mySwitch.available()) { /*Serial.print("Received"); Serial.print( mySwitch.getReceivedValue() ); 序列号.print(" / "); Serial.print( mySwitch.getReceivedBitlength() ); Serial.print("位"); Serial.print("协议:"); Serial.println( mySwitch.getReceivedProtocol() );*/ 如果 (mySwitch.getReceivedValue()==6819768) { digitalWrite(RELAY_PIN_1, !digitalRead(RELAY_PIN_1)); } if (mySwitch.getReceivedValue()==9463928) { digitalWrite(RELAY_PIN_2, !digitalRead(RELAY_PIN_2)); } if (mySwitch.getReceivedValue()==9463928) { digitalWrite(RELAY_PIN_3, !digitalRead(RELAY_PIN_3)); } if (mySwitch.getReceivedValue()==9463928) { digitalWrite(RELAY_PIN_4, !digitalRead(RELAY_PIN_4)); } 延迟(600); mySwitch.resetAvailable(); } } |
|
相关推荐
1个回答
|
|
对于您遇到的问题,可能有以下几个原因:
1. 您使用的特定代码可能仅限于控制2个设备。您可以尝试查找其他代码,以获取控制更多设备的代码。 2. 您的设备与 Alexa 之间的连接可能存在问题。请确保您的设备与 Alexa 同在一个网络上,并且它们都已正确配置。 3. 您的设备可能存在某种问题,使其无法被 Alexa 发现。您可以尝试重置设备并重新配置它们,看看问题是否解决。 4. 您的 Alexa 应用可能需要更新。请尝试更新您的 Alexa 应用程序,看看是否可以解决问题。 您可以尝试这些步骤,看看是否可以解决您遇到的问题。如果这些无法解决问题,请尝试与开发者或其他社区成员寻求帮助。 |
|
|
|
只有小组成员才能发言,加入小组>>
968 浏览 1 评论
553浏览 6评论
462浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
447浏览 5评论
448浏览 4评论
418浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 04:58 , Processed in 0.517884 second(s), Total 74, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号