|
哈哈哈,先和大家分享一个超级大的羊毛,4分钱买了7000多容阻。
前几天刷论坛发现关注的大佬@飞向狙沙 分享了个优惠活动,今天安全下车,特此感谢,帖子链接如下:
白嫖电子元件,拆个带灯开关 https://www.mydigit.cn/thread-329075-1-1.html
白嫖电子元件,拆个带灯开关 https://www.mydigit.cn/thread-329075-1-1.html
白嫖电子元件,拆个带灯开关 https://www.mydigit.cn/thread-329075-1-1.html
作为论坛资深跟风群众之一,看到便宜就想捡,
奈何眼高手低,设想的很多东西都没有做出来,
众多pos(拆电池了),
矿机控制板(亮了之后在吃灰),
空气果(摆件),
联想WiFi开关(还在吃灰)
安卓对讲机,随身WiFi。。。
但实际还是有智能家居的需求,其实就是懒得下床关灯,
之前用8266+继电器做过一个wifi开关,后面因为用的电源模块不行,炸了
然后淘宝发现一个小玩意,加上淘宝红包才不到4块钱,
单火线供电,拆解和讲解原理论坛里大把,就不多说了,
实际上这个就已经满足使用了,施工也简单,有手就行,
但是家里有四个灯,贴四个在床头有点酸爽,再加上一时技痒,
研究下原理,其实这个就是和卷帘门的那种遥控开关是一样的,用的是315/443MHZ的频率发送的,
那事情就简单了,
加上之前买的NodeMcu(实际上就是个8266,直接上arduino)
Duang~
接线就三根,一电源一地一数据,
代码直接用的库自带的demo+8266网页
- <font size="3" face="宋体">#include <ESP8266WiFi.h>
- #include <ESP8266WebServer.h>
- #include <RCSwitch.h>
- //WiFi设置
- const char* ssid = "wifi";
- const char* password = "mima";
- //开关引脚设置
- const int key = 5;
- const int key_next = 12;
- //数据初始化
- int key_state;
- int next_state;
- int pointer=0;
- int value;
- String html=String("hi , i'm switch.");
- int key_value[9] = {1111111,2222222,3333333,4444444,5555555,6666666,7777777,8888888,9999999};
- ESP8266WebServer server(80);
- RCSwitch mySwitch = RCSwitch();
- void get_index() {
- server.send(200, "text/html", html);
- }
- void get_info(){
- String body=String("")+"{"state":""+key_value[pointer]+""}";
- server.send(200, "application/json", body);
- }
- void send_key(){
- value = server.arg("id").toInt();
- Serial.println(value);
- mySwitch.send(value, 24);
- String body=String("")+"{"state":""+value+""}";
- server.send(200, "application/json", body);
- }
- void setup(void) {
- //初始化串口
- Serial.begin(9600);
- Serial.println("");
- Serial.println("串口已连接。");
- //初始化网络
- WiFi.mode(WIFI_STA);
- WiFi.begin(ssid, password);
- while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- Serial.print(".");
- }
- Serial.println("");
- Serial.print("WIFI连接成功,IP地址为:");
- Serial.println(WiFi.localIP());
- //初始化WebServer
- server.on("/", get_index);
- server.on("/info", get_info);
- server.on("/send", send_key);
- server.begin();
- //初始化引脚
- pinMode(key,INPUT);
- pinMode(key_next,INPUT);
- pointer = 0;
- mySwitch.enableTransmit(4);
- }
- void loop(void) {
- key_state = digitalRead(key);
- next_state = digitalRead(key_next);
- if (key_state){
- while(key_state){
- key_state = digitalRead(key);
- mySwitch.send(key_value[pointer], 24);
- Serial.println(key_value[pointer]);
- }
- }
- if (next_state){
- while(next_state){
- next_state = digitalRead(key_next);
- };
- if(pointer<8){
- pointer++;
- }
- else{
- pointer=0;
- }
- Serial.println(key_value[pointer]);
-
- }
- //监听客户请求并处理
- server.handleClient();
- }</font>
复制代码
俩开关作用一个是切换键码,一个是发送数据,
此处有几个需要注意的点,
1.nodemcu和arduino引脚有对应关系
2.nodemcu sd3(arduino gpio10)引脚不可用于输入
从此,就过上了用手机开关灯的生活。
改天闲了,再弄个服务器当gui 
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|