完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我刚刚开始使用 ESP8266 的第一个项目,也很高兴知道我对这类项目没有太多的电子知识。我尝试做的是以下内容。我想将引脚 D1 和接地引脚连接到墙壁开关(通常用于打开或关闭灯)。如果墙壁开关的状态发生变化,我想改变一个 philips hue 灯的状态(意思是:如果灯熄灭,那么如果按下墙壁开关我想打开它,反之亦然)。
ESP8266的代码是: 代码:全选#include #include // Wifi Settings const char* ssid = "xxxxx"; const char* password = "xxxxx"; // Hue Settings const char hueHubIP[] = "xxxxx"; // Hue Bridge IP const int hueHubPort = 80; const char hueUsername[]="xxxxxx"; String light="1"; // Commands String hue_on="{\"on\":true}"; String hue_off="{\"on\":false}"; boolean state = false; // for monitoring switch state changes boolean previousState; // ditto boolean onOffState = false; // To store actual on/off state of light as reported by Hue bridge int switchPin = 5; // -- control sense pin, mapped to D1 on NodeMCU WiFiClient client; void setup() { pinMode(LED_BUILTIN, OUTPUT); // Initialize LED_BUILTIN pin as output Serial.begin(9600); pinMode(switchPin, INPUT_PULLUP); delay(10); // We start by connecting to a WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); previousState = digitalRead(switchPin); digitalWrite(LED_BUILTIN, HIGH); Serial.println("State Switch:"); Serial.println(previousState); } void loop() { state = digitalRead(switchPin); // for checking for state change if (state != previousState) // state change { previousState == state; getHue(); delay(500); if (onOffState == true) // If lights are on, send "Off" command { Serial.println(""); Serial.print("Switch lamp off"); String command = "{\"on\": false}"; setHue(command); digitalWrite(LED_BUILTIN, LOW); } else // If lights are off, send "On" command { Serial.println(""); Serial.print("Switch lamp on"); String command = "{\"on\": true}"; setHue(command); digitalWrite(LED_BUILTIN, HIGH); } } } void setHue(String command) { if (client.connect(hueHubIP, hueHubPort)) { client.print("PUT /api/"); client.print(hueUsername); client.print("/lights/"); client.print(light); client.println("/state HTTP/1.1"); client.println("keep-alive"); client.print("Host: "); client.println(hueHubIP); client.print("Content-Length: "); client.println(command.length()); client.println("Content-Type: text/plain;charset=UTF-8"); client.println(); // Blank line before body client.println(command); client.stop(); } } void getHue() { if (client.connect(hueHubIP, hueHubPort)) { client.print("GET /api/"); client.print(hueUsername); client.print("/lights/"); client.print(light); client.println(" HTTP/1.1"); client.print("Host: "); client.println(hueHubIP); client.println("Content-type: application/json"); client.println("keep-alive"); client.println(); while (client.connected()) { if (client.available()) { client.findUntil("\"on\":", "\0"); onOffState = (client.readStringUntil(',') == "true"); break; } } client.stop(); } } 当我测试此设置并将引脚 D1 接地时,D1 的状态似乎不断变为高/低(而电线仍接地)。我不知道为什么会这样。 任何地方都可以帮助我并告诉我我做错了什么吗?我不应该将 D1 连接到地面,而是以其他方式连接吗?还是我的编码错了? |
|
相关推荐
1个回答
|
|
对于将 ESP8266 的引脚 D1 和接地引脚连接到墙壁开关的操作,您需要采取以下步骤:
1. 将墙壁开关与 ESP8266 连接。如果墙壁开关是单极开关,那么您可以将 ESP8266 的 D1 引脚连接到开关的一个开关脚,将 ESP8266 的 GND 引脚连接到开关的另一个开关脚。 2. 如果墙壁开关是双极开关,那么您需要将 ESP8266 的 D1 引脚连接到开关的其中一个开关脚,将 ESP8266 的 GND 引脚连接到开关的另一个开关脚,并将开关的两个开关脚之间连接一根导线,将导线连接到 ESP8266 的 GND 引脚。 3. 在 ESP8266 的代码中,您需要编写一个函数来检测墙壁开关的状态。可以使用一个带有内部上拉电阻的 GPIO 引脚(例如 D1)作为输入引脚,然后在代码中检测这个 GPIO 引脚的状态来判断开关的状态。当开关被按下时,该引脚会变为低电平状态,否则为高电平状态。 4. 实现开关控制灯光的功能。您可以使用 Hue API 来控制 Philips Hue 灯的状态。可以通过向 Hue Bridge 发送 HTTP 请求来打开或关闭灯,并且可以在 ESP8266 的代码中使用 ESP8266WiFi 库和 ESP8266HTTPClient 库来实现这一功能。 总之,这需要一些电子技能和编程技能来完成,但是您可以通过查阅一些基础电子和编程教程来帮助自己理解这个过程。 |
|
|
|
只有小组成员才能发言,加入小组>>
1140 浏览 1 评论
577浏览 6评论
478浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
462浏览 5评论
463浏览 4评论
438浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 22:42 , Processed in 0.690450 second(s), Total 47, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号