数码之家

 找回密码
 立即注册
搜索
查看: 7349|回复: 53

[家电] 8.5元的WIIFI智能插座使用心得

    [复制链接]
发表于 2021-9-3 19:11:02 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zongher 于 2021-9-3 21:32 编辑


简单写点分享给大家,避免大家少走一些弯路。

QQ图片20210903211135.jpg








QQ图片20210903211125.jpg

QQ图片20210903211130.jpg

我买了5个,想无损拆卸基本不可能,我试过各种办法,可能技不如人!

卖家提供接线图不一定正确;
//IO4=红灯,16=绿灯,14继电器,13按键(实测为5)
#define PIN_KEY 5
#define PIN_Relay 14
#define PIN_LedRed 4
#define PIN_LedGreen 16

例如按键就不对,我实测按键引脚为GPIO5,其他都是正确的。

ESP8266或ESP32的IO0口接地(GND)时上电,会进入下载固件模式,不接地(悬空)进入正常模式。

TX接下载器RX。RX接下载器TX。(下载器一般是TTL转USB,例如常见的CH340系列,淘宝五块钱,没有不能下载程序)

先放出代码,支持天猫精灵,长按进入智能配网。

以下使用的是arduino IDE代码,参考的是B站:Esp8266接入阿里云_天猫精灵_云智能APP_控制LED_插座_哔哩哔哩_bilibili

  1. #include <ESP8266WiFi.h>   //安装esp8266arduino开发环境
  2. static WiFiClient espClient;
  3. #include <ArduinoJson.h>
  4. #include <WiFiUdp.h>
  5. #include <ArduinoOTA.h>
  6. #include <EEPROM.h> //导入Flash库文件
  7. #include <AliyunIoTSDK.h>  //引入阿里云 IoT SDK,需要安装crypto库、PubSubClient库
  8. AliyunIoTSDK iot;
  9. //设置产品和设备的信息,从阿里云设备信息里查看
  10. <font color="#ff0000">#define PRODUCT_KEY ""  //替换自己的PRODUCT_KEY
  11. #define DEVICE_NAME ""  //替换自己的DEVICE_NAME
  12. #define DEVICE_SECRET ""  //替换自己的DEVICE_SECRET</font>
  13. #define REGION_ID "cn-shanghai"  //默认cn-shanghai
  14. //IO4=红灯,16=绿灯,14继电器,13按键(实测为5)
  15. #define PIN_KEY 5
  16. #define PIN_Relay 14
  17. #define PIN_LedRed 4
  18. #define PIN_LedGreen 16

  19. #include <OneButton.h>
  20. OneButton button(PIN_KEY,true);// true:按下为低电平; false : 按下为高电平;不设置时默认值为:true

  21. bool WIFI_Status = false;//是否联网标识
  22. unsigned long lastMsMain = 0;
  23. String ssid;
  24. String psw;
  25. struct config_type{
  26.   char stassid[32];//定义配网得到的WIFI名长度(最大32字节)
  27.   char stapsw[64];//定义配网得到的WIFI密码长度(最大64字节)
  28. };
  29. config_type config;//声明定义内容
  30. void saveConfig(){//保存函数
  31. EEPROM.begin(1024);//向系统申请1024 ROM
  32. //开始写入
  33. uint8_t *p = (uint8_t*)(&config);
  34.   for (int i = 0; i < sizeof(config); i++){
  35.     EEPROM.write(i, *(p + i)); //在闪存内模拟写入
  36.   }
  37.   EEPROM.commit();//执行写入ROM
  38. }
  39. void loadConfig(){//读取函数
  40.   EEPROM.begin(1024);
  41.   uint8_t *p = (uint8_t*)(&config);
  42.   for (int i = 0; i < sizeof(config); i++) {
  43.     *(p + i) = EEPROM.read(i);
  44.   }
  45.   EEPROM.commit();
  46.   ssid = config.stassid;
  47.   psw = config.stapsw;
  48. }
  49. /* 智能配网 */
  50. void smartConfig(){
  51.   WiFi.mode(WIFI_STA);//设置STA模式
  52.   Serial.println("\r\nWait for Smartconfig...");//打印log信息
  53.   WiFi.beginSmartConfig();//开始SmartConfig,等待手机端发出用户名和密码
  54.   while(1){
  55.     Serial.println(".");
  56.     digitalWrite(PIN_LedGreen,LOW);//指示灯闪烁
  57.     delay(600);
  58.     digitalWrite(PIN_LedGreen,HIGH);//指示灯闪烁
  59.     delay(600);
  60.     if(WiFi.smartConfigDone()){//配网成功,接收到SSID和密码
  61.       WIFI_Status = true;
  62.       Serial.println("SmartConfig Success");
  63.       Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
  64.       Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
  65.       strcpy(config.stassid,WiFi.SSID().c_str());//名称复制
  66.       strcpy(config.stapsw,WiFi.psk().c_str());//密码复制
  67.       saveConfig();//调用保存函数
  68.       WiFi.setAutoConnect(true);  // 设置自动连接
  69.       break;
  70.     }
  71.   }
  72. }
  73. /*连接网络*/
  74. void wifiConnect(){
  75.   Serial.println("\r\n正在连接WIFI...");
  76.   loadConfig();//读取ROM是否包含密码
  77.   if(ssid!=0&&psw!=0){//判断ROM是否有密码
  78.     WiFi.begin(ssid,psw);//如果有密码则自动连接
  79.     while(WiFi.status()!= WL_CONNECTED){
  80.       Serial.print(".");
  81.       digitalWrite(PIN_LedGreen, LOW);
  82.       delay(100);
  83.       digitalWrite(PIN_LedGreen, HIGH);
  84.       delay(100);
  85.       button.tick();//加入按钮检测
  86.     }
  87.   }else{
  88.       smartConfig();//如果ROM没有密码则自动进入配网模式
  89.   }
  90.     WIFI_Status = true;
  91.     Serial.println("连接成功");
  92.     Serial.print("IP:");
  93.     Serial.println(WiFi.localIP());
  94. }


  95. void btnclick(){
  96.   digitalWrite(PIN_Relay, !digitalRead(PIN_Relay));
  97. }
  98. void doubleclick(){
  99.   digitalWrite(PIN_LedGreen, !digitalRead(PIN_LedGreen));
  100. }
  101. void longclick(){
  102.   if(WIFI_Status){
  103.    
  104.   }else{
  105.     Serial.println("smartConfig...");
  106.     smartConfig();
  107.   }
  108. }



  109. void setup() {
  110.   Serial.begin(115200);
  111.   pinMode(PIN_LedRed,OUTPUT);
  112.   pinMode(PIN_LedGreen,OUTPUT);
  113.   pinMode(PIN_Relay, OUTPUT);
  114.   pinMode(PIN_Relay, OUTPUT);
  115.   digitalWrite(PIN_Relay, LOW);
  116.   digitalWrite(PIN_LedRed,HIGH);
  117.   digitalWrite(PIN_LedGreen,HIGH);
  118.   button.reset();
  119.   button.setDebounceTicks(80);//设置消抖时长为80毫秒,默认值为:50毫秒
  120.   button.setClickTicks(500);//设置单击时长为500毫秒,默认值为:400毫秒
  121.   button.setPressTicks(1000);//设置长按时长为1000毫秒,默认值为:800毫秒
  122.   button.attachClick(btnclick);
  123.   button.attachDoubleClick(doubleclick);
  124.   button.attachLongPressStart(longclick);

  125.   //开始连接WiFi
  126.   wifiConnect();
  127.   
  128.   //初始化 iot,需传入 wifi 的 client,和设备产品信息
  129.   AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID);
  130.   //绑定一个设备属性回调,当远程修改此属性,会触发powerstate函数;天猫精灵控制的就是powerstate的高低电平(高 = 1,低 = 0)
  131.   AliyunIoTSDK::bindData("powerstate", powerstate);
  132.   //绑定一个设备属性回调,当远程修改此属性,会触发allPowerstate函数
  133.   AliyunIoTSDK::bindData("allPowerstate", allPowerstate);

  134.   ArduinoOTA.onStart([]() {
  135.     String type;
  136.     if (ArduinoOTA.getCommand() == U_FLASH) {
  137.       type = "sketch";
  138.     } else { // U_FS
  139.       type = "filesystem";
  140.     }

  141.     // NOTE: if updating FS this would be the place to unmount FS using FS.end()
  142.     Serial.println("Start updating " + type);
  143.   });
  144.   ArduinoOTA.onEnd([]() {
  145.     Serial.println("\nEnd");
  146.   });
  147.   ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
  148.     Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  149.   });
  150.   ArduinoOTA.onError([](ota_error_t error) {
  151.     Serial.printf("Error[%u]: ", error);
  152.     if (error == OTA_AUTH_ERROR) {
  153.       Serial.println("Auth Failed");
  154.     } else if (error == OTA_BEGIN_ERROR) {
  155.       Serial.println("Begin Failed");
  156.     } else if (error == OTA_CONNECT_ERROR) {
  157.       Serial.println("Connect Failed");
  158.     } else if (error == OTA_RECEIVE_ERROR) {
  159.       Serial.println("Receive Failed");
  160.     } else if (error == OTA_END_ERROR) {
  161.       Serial.println("End Failed");
  162.     }
  163.   });
  164.   ArduinoOTA.begin();
  165.   Serial.println("Ready");
  166.   Serial.print("IP address: ");
  167.   Serial.println(WiFi.localIP());
  168. }


  169. void loop() {
  170.   button.tick();
  171.   
  172.   if(WIFI_Status){//已经联网
  173.     AliyunIoTSDK::loop(); //必要函数
  174.     if (millis() - lastMsMain >= 2000){//发送数据的间隔,2秒发送一次,“云智能APP”上电源按钮的UI实时显示会有2秒延时。
  175.         ArduinoOTA.handle();
  176.         lastMsMain = millis();
  177.         //发送电源状态到云平台(高电平:1;低电平:0)
  178.         AliyunIoTSDK::send("powerstate", digitalRead(PIN_Relay));
  179.         AliyunIoTSDK::send("allPowerstate", digitalRead(PIN_Relay));
  180.     }
  181.     delay(100);
  182.   }else{//未联网
  183.     wifiConnect();//一直请求联网,绿灯快闪
  184.   }
  185.   if(digitalRead(PIN_LedRed) == digitalRead(PIN_Relay)){//同步灯的状态,灯低电平点亮
  186.     digitalWrite(PIN_LedRed,!digitalRead(PIN_Relay));
  187.   }
  188.   delay(100);
  189. }

  190. //电源的属性修改的回调函数1
  191. void powerstate(JsonVariant L)//固定格式,修改参数l
  192. {
  193.   int powerstate = L["powerstate"];//参数l
  194.   if (powerstate == 0){
  195.     digitalWrite(PIN_Relay, LOW);
  196.   }else{
  197.     digitalWrite(PIN_Relay, HIGH);
  198.   }
  199.   Serial.printf("收到的powerstate是:"); Serial.println(powerstate);
  200. }
  201. //电源的属性修改的回调函数2
  202. void allPowerstate(JsonVariant L)//固定格式,修改参数2
  203. {
  204.   int allPowerstate = L["allPowerstate"];//参数2
  205.   if (allPowerstate == 0){
  206.     digitalWrite(PIN_Relay, LOW);
  207.   }else{
  208.     digitalWrite(PIN_Relay, HIGH);
  209.   }
  210.   Serial.printf("收到的allPowerstate是:"); Serial.println(allPowerstate);
  211. }
复制代码

以上是完整代码,需要自己按照B站教程提供一些API接口。

上传需要按以下设置。此MCU型号为ESP8266 16MBIT字节(需要除以8才是我们一般认为的空间,约2M空间),有足够的空间塞下OTA代码。

2.jpg

OTA:空中升级,就是只需要WIFI就能给固件升级,无需下载器,但前提是用下载器先刷入OTA类固件。

以后刷写固件就不需要链接电脑,只需要插上插座就可以更新固件了。

如果你的flash size设置和我不一样,你需要修改

“C:\Users\Administrator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.1\boards.txt”

这个文件,查找:

NodeMCU 1.0

往下找几行。以下地方

nodemcuv2.build.flash_mode=dio
nodemcuv2.build.flash_flags=-DFLASHMODE_DIO
nodemcuv2.build.flash_freq=40
###############从这里开始粘贴########################

nodemcuv2.menu.eesz.1M64=1MB (FS:64KB OTA:~470KB)
nodemcuv2.menu.eesz.1M64.build.flash_size=1M
nodemcuv2.menu.eesz.1M64.build.flash_size_bytes=0x100000
nodemcuv2.menu.eesz.1M64.build.flash_ld=eagle.flash.1m64.ld
nodemcuv2.menu.eesz.1M64.build.spiffs_pagesize=256
nodemcuv2.menu.eesz.1M64.upload.maximum_size=958448
nodemcuv2.menu.eesz.1M64.build.rfcal_addr=0xFC000
nodemcuv2.menu.eesz.1M64.build.spiffs_start=0xEB000
nodemcuv2.menu.eesz.1M64.build.spiffs_end=0xFB000
nodemcuv2.menu.eesz.1M64.build.spiffs_blocksize=4096
nodemcuv2.menu.eesz.1M128=1MB (FS:128KB OTA:~438KB)
nodemcuv2.menu.eesz.1M128.build.flash_size=1M
nodemcuv2.menu.eesz.1M128.build.flash_size_bytes=0x100000
nodemcuv2.menu.eesz.1M128.build.flash_ld=eagle.flash.1m128.ld
nodemcuv2.menu.eesz.1M128.build.spiffs_pagesize=256
nodemcuv2.menu.eesz.1M128.upload.maximum_size=892912
nodemcuv2.menu.eesz.1M128.build.rfcal_addr=0xFC000
nodemcuv2.menu.eesz.1M128.build.spiffs_start=0xDB000
nodemcuv2.menu.eesz.1M128.build.spiffs_end=0xFB000
nodemcuv2.menu.eesz.1M128.build.spiffs_blocksize=4096
nodemcuv2.menu.eesz.1M144=1MB (FS:144KB OTA:~430KB)
nodemcuv2.menu.eesz.1M144.build.flash_size=1M
nodemcuv2.menu.eesz.1M144.build.flash_size_bytes=0x100000
nodemcuv2.menu.eesz.1M144.build.flash_ld=eagle.flash.1m144.ld
nodemcuv2.menu.eesz.1M144.build.spiffs_pagesize=256
nodemcuv2.menu.eesz.1M144.upload.maximum_size=876528
nodemcuv2.menu.eesz.1M144.build.rfcal_addr=0xFC000
nodemcuv2.menu.eesz.1M144.build.spiffs_start=0xD7000
nodemcuv2.menu.eesz.1M144.build.spiffs_end=0xFB000
nodemcuv2.menu.eesz.1M144.build.spiffs_blocksize=4096
nodemcuv2.menu.eesz.1M160=1MB (FS:160KB OTA:~422KB)
nodemcuv2.menu.eesz.1M160.build.flash_size=1M
nodemcuv2.menu.eesz.1M160.build.flash_size_bytes=0x100000
nodemcuv2.menu.eesz.1M160.build.flash_ld=eagle.flash.1m160.ld
nodemcuv2.menu.eesz.1M160.build.spiffs_pagesize=256
nodemcuv2.menu.eesz.1M160.upload.maximum_size=860144
nodemcuv2.menu.eesz.1M160.build.rfcal_addr=0xFC000
nodemcuv2.menu.eesz.1M160.build.spiffs_start=0xD3000
nodemcuv2.menu.eesz.1M160.build.spiffs_end=0xFB000
nodemcuv2.menu.eesz.1M160.build.spiffs_blocksize=4096
nodemcuv2.menu.eesz.1M192=1MB (FS:192KB OTA:~406KB)
nodemcuv2.menu.eesz.1M192.build.flash_size=1M
nodemcuv2.menu.eesz.1M192.build.flash_size_bytes=0x100000
nodemcuv2.menu.eesz.1M192.build.flash_ld=eagle.flash.1m192.ld
nodemcuv2.menu.eesz.1M192.build.spiffs_pagesize=256
nodemcuv2.menu.eesz.1M192.upload.maximum_size=827376
nodemcuv2.menu.eesz.1M192.build.rfcal_addr=0xFC000
nodemcuv2.menu.eesz.1M192.build.spiffs_start=0xCB000
nodemcuv2.menu.eesz.1M192.build.spiffs_end=0xFB000
nodemcuv2.menu.eesz.1M192.build.spiffs_blocksize=4096
nodemcuv2.menu.eesz.1M256=1MB (FS:256KB OTA:~374KB)
nodemcuv2.menu.eesz.1M256.build.flash_size=1M
nodemcuv2.menu.eesz.1M256.build.flash_size_bytes=0x100000
nodemcuv2.menu.eesz.1M256.build.flash_ld=eagle.flash.1m256.ld
nodemcuv2.menu.eesz.1M256.build.spiffs_pagesize=256
nodemcuv2.menu.eesz.1M256.upload.maximum_size=761840
nodemcuv2.menu.eesz.1M256.build.rfcal_addr=0xFC000
nodemcuv2.menu.eesz.1M256.build.spiffs_start=0xBB000
nodemcuv2.menu.eesz.1M256.build.spiffs_end=0xFB000
nodemcuv2.menu.eesz.1M256.build.spiffs_blocksize=4096
nodemcuv2.menu.eesz.1M512=1MB (FS:512KB OTA:~246KB)
nodemcuv2.menu.eesz.1M512.build.flash_size=1M
nodemcuv2.menu.eesz.1M512.build.flash_size_bytes=0x100000
nodemcuv2.menu.eesz.1M512.build.flash_ld=eagle.flash.1m512.ld
nodemcuv2.menu.eesz.1M512.build.spiffs_pagesize=256
nodemcuv2.menu.eesz.1M512.upload.maximum_size=499696
nodemcuv2.menu.eesz.1M512.build.rfcal_addr=0xFC000
nodemcuv2.menu.eesz.1M512.build.spiffs_start=0x7B000
nodemcuv2.menu.eesz.1M512.build.spiffs_end=0xFB000
nodemcuv2.menu.eesz.1M512.build.spiffs_blocksize=8192
nodemcuv2.menu.eesz.1M=1MB (FS:none OTA:~502KB)
nodemcuv2.menu.eesz.1M.build.flash_size=1M
nodemcuv2.menu.eesz.1M.build.flash_size_bytes=0x100000
nodemcuv2.menu.eesz.1M.build.flash_ld=eagle.flash.1m.ld
nodemcuv2.menu.eesz.1M.build.spiffs_pagesize=256
nodemcuv2.menu.eesz.1M.upload.maximum_size=1023984
nodemcuv2.menu.eesz.1M.build.rfcal_addr=0xFC000
nodemcuv2.menu.eesz.2M64=2MB (FS:64KB OTA:~992KB)
nodemcuv2.menu.eesz.2M64.build.flash_size=2M
nodemcuv2.menu.eesz.2M64.build.flash_size_bytes=0x200000
nodemcuv2.menu.eesz.2M64.build.flash_ld=eagle.flash.2m64.ld
nodemcuv2.menu.eesz.2M64.build.spiffs_pagesize=256
nodemcuv2.menu.eesz.2M64.upload.maximum_size=1044464
nodemcuv2.menu.eesz.2M64.build.rfcal_addr=0x1FC000
nodemcuv2.menu.eesz.2M64.build.spiffs_start=0x1F0000
nodemcuv2.menu.eesz.2M64.build.spiffs_end=0x1FB000
nodemcuv2.menu.eesz.2M64.build.spiffs_blocksize=4096
nodemcuv2.menu.eesz.2M128=2MB (FS:128KB OTA:~960KB)
nodemcuv2.menu.eesz.2M128.build.flash_size=2M
nodemcuv2.menu.eesz.2M128.build.flash_size_bytes=0x200000
nodemcuv2.menu.eesz.2M128.build.flash_ld=eagle.flash.2m128.ld
nodemcuv2.menu.eesz.2M128.build.spiffs_pagesize=256
nodemcuv2.menu.eesz.2M128.upload.maximum_size=1044464
nodemcuv2.menu.eesz.2M128.build.rfcal_addr=0x1FC000
nodemcuv2.menu.eesz.2M128.build.spiffs_start=0x1E0000
nodemcuv2.menu.eesz.2M128.build.spiffs_end=0x1FB000
nodemcuv2.menu.eesz.2M128.build.spiffs_blocksize=4096
nodemcuv2.menu.eesz.2M256=2MB (FS:256KB OTA:~896KB)
nodemcuv2.menu.eesz.2M256.build.flash_size=2M
nodemcuv2.menu.eesz.2M256.build.flash_size_bytes=0x200000
nodemcuv2.menu.eesz.2M256.build.flash_ld=eagle.flash.2m256.ld
nodemcuv2.menu.eesz.2M256.build.spiffs_pagesize=256
nodemcuv2.menu.eesz.2M256.upload.maximum_size=1044464
nodemcuv2.menu.eesz.2M256.build.rfcal_addr=0x1FC000
nodemcuv2.menu.eesz.2M256.build.spiffs_start=0x1C0000
nodemcuv2.menu.eesz.2M256.build.spiffs_end=0x1FB000
nodemcuv2.menu.eesz.2M256.build.spiffs_blocksize=4096
nodemcuv2.menu.eesz.2M512=2MB (FS:512KB OTA:~768KB)
nodemcuv2.menu.eesz.2M512.build.flash_size=2M
nodemcuv2.menu.eesz.2M512.build.flash_size_bytes=0x200000
nodemcuv2.menu.eesz.2M512.build.flash_ld=eagle.flash.2m512.ld
nodemcuv2.menu.eesz.2M512.build.spiffs_pagesize=256
nodemcuv2.menu.eesz.2M512.upload.maximum_size=1044464
nodemcuv2.menu.eesz.2M512.build.rfcal_addr=0x1FC000
nodemcuv2.menu.eesz.2M512.build.spiffs_start=0x180000
nodemcuv2.menu.eesz.2M512.build.spiffs_end=0x1FA000
nodemcuv2.menu.eesz.2M512.build.spiffs_blocksize=8192
nodemcuv2.menu.eesz.2M1M=2MB (FS:1MB OTA:~512KB)
nodemcuv2.menu.eesz.2M1M.build.flash_size=2M
nodemcuv2.menu.eesz.2M1M.build.flash_size_bytes=0x200000
nodemcuv2.menu.eesz.2M1M.build.flash_ld=eagle.flash.2m1m.ld
nodemcuv2.menu.eesz.2M1M.build.spiffs_pagesize=256
nodemcuv2.menu.eesz.2M1M.upload.maximum_size=1044464
nodemcuv2.menu.eesz.2M1M.build.rfcal_addr=0x1FC000
nodemcuv2.menu.eesz.2M1M.build.spiffs_start=0x100000
nodemcuv2.menu.eesz.2M1M.build.spiffs_end=0x1FA000
nodemcuv2.menu.eesz.2M1M.build.spiffs_blocksize=8192
nodemcuv2.menu.eesz.2M=2MB (FS:none OTA:~1019KB)
nodemcuv2.menu.eesz.2M.build.flash_size=2M
nodemcuv2.menu.eesz.2M.build.flash_size_bytes=0x200000
nodemcuv2.menu.eesz.2M.build.flash_ld=eagle.flash.2m.ld
nodemcuv2.menu.eesz.2M.build.spiffs_pagesize=256
nodemcuv2.menu.eesz.2M.upload.maximum_size=1044464
nodemcuv2.menu.eesz.2M.build.rfcal_addr=0x1FC000
###############到这里结束########################
nodemcuv2.menu.eesz.4M2M=4MB (FS:2MB OTA:~1019KB)
nodemcuv2.menu.eesz.4M2M.build.flash_size=4M
nodemcuv2.menu.eesz.4M2M.build.flash_size_bytes=0x400000
nodemcuv2.menu.eesz.4M2M.build.flash_ld=eagle.flash.4m2m.ld

这是为这个型号的芯片提供1M或2M FLASH固件方法。然后重新打开ARDUINO IDE即可。

如有不懂,可在线留言。





打赏

参与人数 3家元 +63 收起 理由
kkdkj + 20 謝謝分享
moontree + 10 謝謝分享
家睦 + 33

查看全部打赏

本帖被以下淘专辑推荐:

发表于 2021-9-3 21:02:04 | 显示全部楼层
啥插座?没有图吗?我家里的三个博联的智能插座基本上废弃了,家里四五十个小米的智能设备,搞了七八个小米智能插座!
回复 支持 反对

使用道具 举报

发表于 2021-9-3 21:25:49 | 显示全部楼层
10元都不到?这可以啊,哪里有?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-3 21:32:54 | 显示全部楼层
fqxxqwy 发表于 2021-9-3 21:25
10元都不到?这可以啊,哪里有?

某鱼,也是站内大佬分享跟着上的车
回复 支持 反对

使用道具 举报

发表于 2021-9-4 04:28:07 | 显示全部楼层
要是不能无损坏拆开,刷外外观也不好看。用联想本身的app不好么?
回复 支持 反对

使用道具 举报

发表于 2021-9-4 07:47:27 来自手机浏览器 | 显示全部楼层
哪里买的啊,我在某鱼搜不到
回复 支持 反对

使用道具 举报

发表于 2021-9-4 21:10:28 | 显示全部楼层
上次看到了,犹豫了一下还是没买,感觉破开壳就意义不大了,不如直接买esp8266加继电器了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-6 21:28:41 | 显示全部楼层
另外补充一点,使用的是阿里云生活物联网平台,测试模式,最多支持50个设备接入(比点灯科技多10倍数量)。商业模式是2.5元/台设备。
支持APP有:云智能,天猫精灵,siri
不支持其他平台,超级稳定,连续使用几个月不掉线。

新固件支持以下特点:
设备不会自动进入智能配网模式,需要手动进入智能配网模式;
(此举是为了解决停电时找不到路由器而自动进入配网模式的BUG,上电后会一直读取联网,知道成功为止)
绿灯快闪:正在链接WIFI
绿灯慢闪:等待智能配网

红灯常亮:插座带电
红灯熄灭:插座不带电

长按时上电进入固件下载模式(OTA),绿灯常亮
上电时频繁按按钮,进入智能配网模式

单击按钮:开/关电路
回复 支持 反对

使用道具 举报

发表于 2021-9-7 09:11:24 | 显示全部楼层
不好拆所以没买。
回复 支持 反对

使用道具 举报

发表于 2021-9-7 09:32:39 | 显示全部楼层
我也买了,拆开和你的板子一样。 之前刷了出现 ESP_AP, 但是不正常,看了你的贴子,感觉是flash 那里的设置不对。默认那里是4MB。 现在改了,再刷一下试试。
回复 支持 反对

使用道具 举报

发表于 2021-9-7 09:35:33 | 显示全部楼层
不错不错  一建配网功能很实用  准备拷贝到blinker上使用  
回复 支持 反对

使用道具 举报

发表于 2021-9-7 09:56:41 | 显示全部楼层
哪能买到? 买不到只能看你玩,我馋:mad:
回复 支持 1 反对 0

使用道具 举报

发表于 2021-9-7 09:59:17 | 显示全部楼层
果然是 flash设置的问题,按照楼主的方法,把flash 设置为 2MB 再刷入,就可以了。现在blinker app 显示设备在线,而且控制的时候,指示灯会跟着亮或灭,但是插座没有电,按键好像也没有反应。  

应该和楼主提到的 GPIO 定义问题。再看看。

关于开壳,我是用刀片沿四周缝隙敲一圈,然后用钢翘棒,翘出缝,在用一字螺丝刀全部翘开,有一点开裂,整体还好。
回复 支持 反对

使用道具 举报

发表于 2021-9-8 01:00:50 | 显示全部楼层
本帖最后由 sile 于 2021-9-8 21:27 编辑

现在刷进去了 绿灯显示正常 按键短按开关继电器正常
一直在智能配网中 也不显示模块发出的信号 没法与APP进行连接
回复 支持 反对

使用道具 举报

发表于 2021-9-8 11:42:34 | 显示全部楼层
编译报错最郁闷了
回复 支持 反对

使用道具 举报

发表于 2021-9-8 14:26:00 来自手机浏览器 | 显示全部楼层
felix-zhang 发表于 2021-9-7 09:59
果然是 flash设置的问题,按照楼主的方法,把flash 设置为 2MB 再刷入,就可以了。现在blinker app 显示设 ...

无损开壳很简单 用布包起来 然后用硬的木头砸 开缝后用撬棒撬一下就可以了 我就是这么干的 毫无损伤 一定要控制好力度
回复 支持 反对

使用道具 举报

发表于 2021-9-8 14:45:31 | 显示全部楼层
sile 发表于 2021-9-8 01:00
复制下来的代码 报了一堆错 是哪个环节出问题了吗?

<font color="#ff0000">#define PRODUCT_KEY ""  //替换自己的PRODUCT_KEY

以上错误那么明显没看出来吗:dizzy:
回复 支持 反对

使用道具 举报

发表于 2021-9-8 14:54:49 | 显示全部楼层
本帖最后由 zhang_yy007 于 2021-9-8 15:12 编辑

button.attachClick(btnclick);
  button.attachDoubleClick(doubleclick);
  button.attachLongPressStart(longclick);

调试时发现,你把上面这段程序放在setup里了   所以   正常联网后按键就失效了 ,后面的人可以把这段程序放在loop里试试
不好意思,弄错了  对button这个库还不了解   可能因为我没有写入ID  所以这个按键不好使吧   后来单独测试了   程序没问题   谢谢
回复 支持 反对

使用道具 举报

发表于 2021-9-8 16:15:42 | 显示全部楼层
lbq691477940 发表于 2021-9-8 14:45
#define PRODUCT_KEY ""  //替换自己的PRODUCT_KEY

以上错误那么明显没看出来吗 ...

已经替换后显示这个  我也纳闷啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-9 09:29:02 | 显示全部楼层
本帖最后由 zongher 于 2021-9-9 15:56 编辑
  1. <blockquote>#include <ESP8266WiFi.h>
复制代码
以上是最新的固件代码,我已经在使用当中。
需要填上自己的API信息,红色部分。

库文件在我上面提到的视频中可以下载。

平台特点:可以使用50个测试产品(实际不止)例如我的5个插座只需要做好一个用不同的名字即可简单配置其他4个,通过名字分配二维码
支持APP有:云智能,天猫精灵,siri(若想支持小爱同学不建议使用此固件
不支持其他平台(国外的一些大平台也可以使用),超级稳定,连续使用几个月不掉线。

新固件支持以下特点:
1.设备不会自动进入智能配网模式,需要手动进入智能配网模式;(此举是为了解决停电时找不到路由器而自动进入配网模式的BUG,上电后会一直读取联网,知道成功为止)

2.灯光提示:
绿灯快闪:正在链接WIFI
绿灯慢闪:等待智能配网,(网上搜索ESP8266智能配网)
红灯常亮:插座带电
红灯熄灭:插座不带电

3.按钮操作:
单击按钮:开/关电路(红色代表带电)长按时上电进入固件下载模式绿灯常亮(用于OTA升级固件)
上电时有节奏的双击按钮(理论是双击检测,但在联网成功后那一刻成功,无法知道什么时候联网成功所以一直需要双击),强制进入智能配网模式


4.智能配网后账号密码会自动保存,以免重启后再次使用

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-3-29 23:56 , Processed in 0.187200 second(s), 15 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表