找回密码
 立即注册
查看: 5839|回复: 5

[原创] 8.5元联想ESP8266智能wifi插座拆解、刷机天猫语音控制

[复制链接]

11

主题

51

回帖

209

积分

中级渣柚V1

积分
209
QQ
 楼主| 易记 发表于 2021-8-21 13:57:54 | 显示全部楼层 |阅读模式 IP:–浙江–嘉兴 电信
本帖最后由 易记 于 2021-8-21 14:05 编辑
7 d. Q8 Y$ O6 q5 Z9 |2 H7 H2 @  ]1 i9 j! g+ f1 S& f0 Y7 |
最近玩ESP8266,想做个天猫控制开关。& c* @* `/ \5 U. ]
但是我很懒,一个个配元件嫌麻烦,于是想着能不能淘到便宜的带电源板的模块,多倒是蛮多,一般都要20多块钱。
9 ^% e  ^5 \0 x) \还是闲钱上逛一下看,找到一个联想的国外版8266智能插座,价格才8.5元一个。有一点不足,就是只有三孔,要是五孔的就好了。老板说五孔杂牌价格一样也有货,晚两天发布。
0 j' j# m& K1 {. {2 {/ V, Z0 { QQ截图20210821125037.jpg $ S( S- \; \# c
2 }8 }- |- L. @9 p  T; o5 f
6 C# `$ q" c; B" U0 f6 i# r
问了一下店主,买20个一盒才包邮,想着20个还是有点多,买了5个,连运费47.5元。
6 V1 K+ I/ V$ g1 P
  U0 g! o7 }. b4 o6 z QQ图片20210821124517.jpg
' @- n; v! K6 n. _$ i8 G

/ C' Z! ]9 P5 ~9 p, O  [8 l7 d4 h  W2 g2 p
. a/ K' s1 d, _5 @6 o
到手,当然是拆拆拆。
* `: o3 y8 j- ^3 `2 L IMG_20210820_134104.jpg ( T& S8 c, h$ e# X+ R5 u( [

: }4 ^, i! r' T; o

0 |( q8 \; f% h2 C4 |9 f联想的做工,还是感觉不错的,光这个继电器应该也要个7-8块钱。3 G4 g. u: z, ~9 g0 @
IMG_20210820_160634.jpg " P2 `- X8 `( H, c/ g' ^

. q4 b( k2 v3 i0 y) g+ U) ~3 f
# N/ H+ D- O5 E9 c
继电器是两组常开,感觉要是接电灯双控开关是不是有点麻烦的,不过用于插座是很安全,要断二条线都断开。
4 ?0 Y* |6 z) T3 y QQ截图20210821133707.jpg
! e# v% |- S* }7 B3 L
/ k) O6 Z0 f' Z2 D- ?. Y8 {; ]
IMG_20210820_134114.jpg ( l% K0 @1 f# b/ U: v+ o! Y
7 E) T. h0 V% u! ~9 j
电源芯片
3 ?% i: `2 y9 _  W0 ]- ~
& N. M6 ?4 @" i! U3 R+ X
2 V" I8 U( ?) e

+ T% D1 D! D) L$ y& W有一个按钮,按钮有二个蓝色LED灯
1 Y$ v3 }/ o1 s- H- u IMG_20210820_134157.jpg
3 x1 s# c. n5 d8 P  a4 |9 V
5 M3 `4 f1 C' {9 T: k
4 N7 x) z# x4 x* u0 K
8266
; Z1 O# H6 |/ ^6 |4 k2 u) J) l IMG_20210820_141913.jpg % x2 }0 p; R% m9 O( A

3 J$ p# E' w) G5 ]# y

3 ~1 n  X, ~. `9 _8 ~! R) u- K, w8 g

9 ^! T# q' I2 y4 ]+ U$ M接下来就是刷机了,版子上面都预留测试点。1 e. \. K  l$ m) ~- c5 L- r. Y' Q' D
接线比较容易,上面都有标示,GND,3.3V,TXD-RX,RXD-TX,还有一个就是IO0接地后刷机。
8 ]* ^) B3 B1 Z: i# P& [1 B3 N 未标题-1.jpg
- L$ L3 t0 H1 V( i& _9 ?
注意RX这个点,就是3.3V边上的这个点,焊盘设计的就点问题,电烙铁热一点或是焊的刷机线过粗的话,容易掉焊盘。
% |- Y+ z4 R) [! e; j' T/ u要是掉了就只有一个过孔了,要是焊不上,只能再拆开接在另一面,所以为了避免不必要的麻烦,请注意一下。
. u6 o9 t1 p! |% e, Q5 s$ W
/ `) S; ^8 l+ K' k* `8 i- S, u& Y

. P" i" O  |$ s+ q+ `  @

4 N$ x7 [; k# D! S& A5 C' M) C, m0 S5 {6 D$ e

. a; Q; J, ?* D1 A, V    5号脚位是继电器输出7 o7 i1 j# u3 e) e* H: I
    12号脚位是灯输出
/ n  U2 W: m2 }; p$ Q$ a+ Z; D    4号脚位是按键
+ D+ p6 B$ \# T: {4 T" D$ Q# s

8 l- w) n& H; t6 n+ C1 w( H

" W- E4 c% b- B2 w& z
& X3 g, z( B$ A8 _4 I4 Y+ B  {0 Z

$ W) ?  O1 m0 h! ]: F卖家有发一个源码,如下
  1. #define BLINKER_WIFI                    //官方wifi协议库  ^/ \8 e: K- }6 Y( Y+ C! F, q
  2. #define BLINKER_MIOT_LIGHT              // 设置小爱灯类库9 H, s0 D: `3 T: U8 |
  3. #define BLINKER_ALIGENIE_LIGHT          // 设置天猫灯类库* N7 U5 o; k6 Q0 d' u! `( q" ~
  4. #define BLINKER_PRINT Serial            //串口协议库- [4 W& |. _- f* w: m- [, w: J
  5. #include <Blinker.h>                    //官方库
    2 r, l; g" x. W7 j2 j1 K! \
  6. #include <ESP8266WiFi.h>                //官方库5 c& l- Y0 h8 B
  7. WiFiServer server(80);                  // 服务器端口号3 P* ^; V' S; F" o6 b

  8. + O  U% ~, N$ G) ^* @# [
  9. char auth[] = "c4942fb1d5e4";     //设备key7 L& e" l0 k8 @9 N; \, ?% M; T; e+ s
  10. char ssid[] = "wanboshi";     //路由器wifi ssid# T$ j  H$ z( T  i/ \2 S
  11. char pswd[] = "1365662999813586348220";     //路由器wifi 密码
    8 L0 [1 G2 ~& g( Z5 c  P# j, i8 Z+ a
  12. ' z3 H$ U0 \7 O" m' k
  13. bool oState = false;$ v/ g. ]7 |" _* ]" u0 a  K
  14. 5 T4 U; s: x; [, S" {
  15. int kg=5;//继电器输出+ [8 y! u; F. Z9 ?6 X$ `
  16. int de=12;//灯输出/ Q" [( }- A5 A; G" t& B6 O. E' H
  17. int key=4 ;//按键- d* w) W. _3 x. g! o
  18. //*******新建组件对象. n, E) |$ N: r0 _) f; u0 {
  19. 1 i: j# D/ w6 G0 Q/ @* }5 _
  20. BlinkerButton Button1("btn-abc");              //设置app按键的键名
    ( I$ Q# c+ D, ^0 r! V. U- G# |1 z
  21. //*******app上按下按键即会执行该函数app里按键, Y/ ~; H4 G$ ~# a0 R6 K
  22. void button1_callback(const String & state)+ T; l( E6 h4 `+ ^
  23. {, G$ L% t$ x) q4 W' M) m$ G
  24.    if (digitalRead(kg)==LOW)  C# w% \- T2 L, L
  25.    {
      e/ E% R8 f/ M
  26.         BLINKER_LOG("get button state: ", state);
    + K2 u2 U6 [8 `+ g; p2 c; a) i* M
  27.         digitalWrite(kg, HIGH);1 d# l0 i0 P5 Q& W) B, v# `$ b, a
  28.         digitalWrite(de, LOW);0 ^7 {. I& K7 I
  29.         Button1.print("on");! a1 l9 m6 b; R$ L4 P% |+ b  o& q
  30.         Button1.color("#0000FF");              //设置app按键是浅蓝色! v% ]; ~1 P( n
  31.         Button1.text("开启中");8 x4 B# a$ j- ^
  32.    }
    * d' p2 L1 C- f6 w# T( z5 I4 f: @
  33.    else if (digitalRead(kg)==HIGH)
    * X2 ~% t& y' y
  34.    {
    9 K  x/ }6 w2 J# K0 }5 U3 P
  35.         BLINKER_LOG("get button state: ", state);
    & p& F5 E3 g9 i9 G
  36.         digitalWrite(kg, LOW);4 A% k* _7 z9 Q8 \' v  u2 i8 _
  37.         digitalWrite(de, HIGH);8 n" E, ?' U1 r  a( v. _3 v+ E, }
  38.         Button1.print("off");0 @3 b; B$ N' ]
  39.         Button1.color("#00FFFF");              //设置app按键是深蓝色
    4 r  T& w6 c9 V) ^# ?" h
  40.         Button1.text("关闭中");- L6 d8 K$ I: A6 G9 `
  41.    }% A( F  }8 @* n, P% V$ o6 `
  42. }
    8 P& B. {7 d2 t  j! {
  43.   j* ]7 _. k5 p2 q
  44. //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    , I( f% J) Q$ ?+ z

  45. $ p$ d5 j: R0 A. K2 a- X
  46. //*******如果小爱有对设备进行操作就执行下面
    3 s5 z. a' q  g- K: T& `& L
  47. void miotPowerState(const String & state), r9 |  q+ h& i
  48. {
    $ T, h8 p- S2 ]5 b% u9 R
  49.     BLINKER_LOG("小爱语音操作!");              //串口打印# U2 E; `- H! H8 D. U
  50.     if (state == BLINKER_CMD_ON){
    & Y2 W5 X9 }( ~
  51.         ' A% V) I: ^$ V1 f4 `6 j
  52.         digitalWrite(kg, HIGH);
    8 e7 \- e! Z* ]% H
  53.         digitalWrite(de, LOW);' q7 v. q/ A# i2 S# k, N5 r8 |
  54.         Button1.print("on");
    , N) _* z& e1 W. Y8 R$ u. g
  55.         Button1.color("#0000FF");              //设置app按键是浅蓝色
    ' Y7 }" p6 J0 o* W) o: V6 s
  56.         Button1.text("开启中");9 k8 `4 B5 d  A: t
  57.         BlinkerMIOT.powerState("on");3 b8 n7 _/ E: i& h# s: Q( Z) K2 G; P
  58.         BlinkerMIOT.print();: W* T, q) F. l( F# m; X/ m
  59.    }( ?# x2 W- \/ Y& }5 K* X
  60.    else if (state == BLINKER_CMD_OFF)
    ' {4 y+ N' I( o3 Q' P
  61.    {
    : M  Y, o4 [" r0 P+ I8 r
  62.         
    ! d9 m3 p( D) I; `) c
  63.         digitalWrite(kg, LOW);
    0 C; V/ E1 Q- }5 e/ o0 }
  64.         digitalWrite(de, HIGH);
    % ~9 m! p  Z. h. i( W
  65.         Button1.print("off");$ k7 @* Q' t" F( J# H+ z! N
  66.         Button1.color("#00FFFF");              //设置app按键是深蓝色
    7 c7 n5 l; t  }- F( r
  67.         Button1.text("关闭中");
    * V! R7 D* N. Z! e2 Y. a4 J3 I
  68.         BlinkerMIOT.powerState("off");7 m6 V% f9 A( `$ @3 ?, T
  69.         BlinkerMIOT.print();
    4 ?, b9 I( E2 u" ?) K! ~6 J
  70.    }- w- N$ u% ~3 P% ]8 z* t; V
  71.        7 M: m5 j0 X& O
  72. ; b/ Z" v- H8 g
  73. }/ z# G8 U! B% Q; K) g
  74. //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    3 D. ~  t" f9 V7 A3 l& P
  75. //*******如果天猫精灵有对设备进行操作就执行下面5 J5 K+ L, f+ M. c) ~9 g
  76. void aligeniePowerState(const String & state)( T1 w/ S# m% j& t5 W
  77. {
    7 S3 {1 M5 [+ b
  78.     BLINKER_LOG("need set power state: ", state);
    # R# w; \) ?( i8 S1 y8 ~
  79.     if (state == BLINKER_CMD_ON)
    7 |3 z& r6 z) Z* N  s
  80.     {
    0 o+ m5 }+ C# @, g; T" p4 v
  81.         
      i" F' h& j9 ^4 Q
  82.         digitalWrite(kg, HIGH);( ]/ b5 Y: ~9 |4 ]. ^
  83.         digitalWrite(de, LOW);" y/ C( f9 ]. T4 D
  84.         Button1.print("on");
      s% n' g2 G, z
  85.         Button1.color("#0000FF");              //设置app按键是浅蓝色
    ( `8 d, L1 Q5 }! M; P, h' ^( _! ]
  86.         Button1.text("开启中");
    9 q* ~  _: v# I& j
  87.         BlinkerAliGenie.powerState("on");# {# N1 V- `, g# [
  88.         BlinkerAliGenie.print();
    0 Q: t' _$ y# V, V. `5 f7 k
  89.     }2 F! j' O6 N) R7 W2 V8 e1 F3 H2 v- i
  90.     else if (state == BLINKER_CMD_OFF)% _" a3 \3 Z  n6 h# c1 J' w, ?: ?4 v
  91.     {9 w) M* f4 M; X) A% X* j
  92.         / E4 W/ d/ A$ U* r& U1 y) N
  93.         digitalWrite(kg, LOW);
    ' t4 d% H5 N' Z4 i" [' T/ E0 a) b$ a
  94.         digitalWrite(de, HIGH);
    0 h8 X# @& C' s! A+ y
  95.         Button1.print("off");
    ' i. G, @$ T/ A- I* K# f& U4 K
  96.         Button1.color("#00FFFF");              //设置app按键是深蓝色; c  ]) X) S/ ^) V# z6 D- c/ o. C
  97.         Button1.text("关闭中");
    % ~7 n) a- F/ i) ~% h0 f
  98.         BlinkerAliGenie.powerState("off");  d8 p; B2 a. W% ]8 f1 z+ a
  99.         BlinkerAliGenie.print();% Z7 V4 Z, O' B' Y( p9 o# O; j
  100.     }3 |& ?- t; s1 v# L, n# C5 V
  101.           u) b. ~& c) x# S8 t' h( o

  102. 4 _; M) }& Y  B2 r# o* {  y. P
  103. }$ u, j! E; l0 `+ Q$ C/ a  I
  104.   //*******app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态30s~60s一次4 e! [7 g3 r( L8 H1 Y" J' U$ ^
  105. void heartbeat()9 k) g! W: o- k* D2 ]
  106. {
    - `& N: q/ A" [: Z/ h* W6 V, R+ G* l
  107.   BLINKER_LOG("状态同步!");
    6 N& F9 ]0 F: g& u+ b* W- m: |
  108.    if (digitalRead(kg)==HIGH)
      A- ?7 l) Q$ u. T" E* _1 @9 ?
  109.     {
    + }7 K! v, V% e
  110.       Button1.print("on");
    6 A/ d! l! f9 O$ t7 o& J% |" A
  111.       Button1.color("#0000FF");              //设置app按键是浅蓝色- b$ J2 m9 i7 M3 p+ j2 {
  112.       Button1.text("开启中");: u! m( f! H; _
  113.     }
    8 ^+ i- G$ s; e9 e
  114.     else
    8 A& M* w6 B! R
  115.     {% ~( `: ^+ z. @* E1 y
  116.       Button1.print("off");
    3 ~& k* z$ e$ b
  117.       Button1.color("#00FFFF");              //设置app按键是深蓝色! I* Y- w( w; ^
  118.       Button1.text("关闭中");
    9 w8 |' m9 d- S3 M/ G
  119.    
    : `) P$ x- n$ M1 F* }
  120.     }
    0 a& Z5 `3 T' c6 N+ E7 ]" Y: ?$ z: X  d
  121. }6 A5 F3 K7 v: ^! ?" Q# S0 h
  122. //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++0 y8 F+ a+ q* h! @! W
  123. void setup()
    ) ~) v. D2 y1 S' Q- B% T8 t
  124. {
    * i) S" {1 v/ u, l
  125.   // 初始化串口
    " @' E' Y! K0 a7 ~
  126.   Serial.begin(115200);$ E9 o7 J, Y3 D4 \6 w& M4 d
  127.   delay(10);
    9 l) r: T5 A/ Z( ^- b3 J( ?
  128.   BLINKER_DEBUG.stream(Serial);) ~9 t6 l* M. @* g, S# M: O# x
  129.   // 初始化有LED的IO; t' F7 O6 y8 F& K; o! Z
  130.   pinMode(kg, OUTPUT);                 8 P' m8 I5 [; B( }" y
  131.   digitalWrite(kg, LOW);//初始化继电器上电状态
    ' \% o. U2 H; \) {
  132.   pinMode(de, OUTPUT);% I; Q0 A. x/ `$ Z8 n
  133.   digitalWrite(de, HIGH);9 S! G7 [1 u$ H
  134.   pinMode(key, INPUT);            9 R, b/ D$ Q) _
  135.   Serial.println();
    $ w: y% k  b/ A; R- Q/ A
  136.   Serial.print("Connecting to ");
    ( K, u3 h0 {$ o9 f% i
  137.   Serial.println(ssid);
    ( z! D. s2 ^& E: X/ m  |7 r
  138.   WiFi.begin(ssid, pswd);: ?0 g- }3 P$ ^# e6 _
  139.   while (WiFi.status() != WL_CONNECTED) {( r: }+ t" G- S# j
  140.     delay(500);
    / ?' N# ~7 G6 l# x( Q  c; V. q- i
  141.     Serial.print(".");$ F( N9 K5 U6 r9 V& k; v' C
  142.   }
    6 S7 f5 W$ o9 a# F
  143.   Serial.println("");4 Y$ P: ~( U6 F' C- m! C
  144.   Serial.println("WiFi connected");
    ' h) G. r  ~( F2 _- r
  145.   server.begin();
    . u/ X, J2 Q# n' S, z. @8 S, d- h
  146.   Serial.println("Server started @ ");
    7 u9 t0 s: G% A. R6 x" o& r) |
  147.   Serial.println(WiFi.localIP());" I7 \7 j' l/ z* E2 E9 J9 j
  148.   //打印出IP地址,后期可以制作显示器来外部硬件显示ip
    & m; O: B8 r( @& k# r6 ]" {9 D
  149.   Serial.println("To control GPIO, open your web browser.");
    0 C7 z& T% D/ k; V8 w; A. g
  150.   Serial.println("To set GPIO 0 high, type:");
      ~$ E8 g$ Y$ i8 ?7 F5 R
  151.   Serial.print(WiFi.localIP());
    $ B4 I3 V  ]1 d0 f% O. \
  152.   Serial.println("/gpio/1");1 l# J; D; I1 p3 _; Q) |4 N" A# ~
  153.   Serial.println("To set GPIO 0 low, type:");
    # r5 q4 @) ]& ~
  154.   Serial.print(WiFi.localIP());/ z) @5 g3 x7 c; }/ E6 U7 }
  155.   Serial.println("/gpio/0");
    $ }& Q! Y, [7 B! O
  156.   Serial.println("To toggle GPIO 0, type:");2 S! }0 {2 M$ S
  157.   Serial.print(WiFi.localIP());
    - ~3 Y3 Z$ o- ^) d% U6 l8 t
  158.   Serial.println("/gpio/4");
    4 A2 z: q; T- i  G6 X$ P
  159. / m3 B3 {0 N8 I8 l  {  E
  160.   // 初始化blinker3 X+ _& ?1 C1 t+ i
  161.   Blinker.begin(auth, ssid, pswd);
    . B! i7 c8 t4 p6 J2 H2 O% K8 C
  162.   BlinkerMIOT.attachPowerState(miotPowerState);              //小爱语音操作注册函数
      A+ ?" [1 D* _8 n/ h
  163.   BlinkerAliGenie.attachPowerState(aligeniePowerState);      //天猫语音操作注册函数% ~% m6 {1 h- t% Q- o$ B7 z. C
  164.   Blinker.attachHeartbeat(heartbeat);              //app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态进行语音操作和app操作同步。
    + Q8 m) g% e' A) q4 X( l3 E' O2 r7 H

  165. ' a& z2 }9 I3 d/ z4 G1 T1 P3 ]
  166.   Button1.attach(button1_callback);             //app上操作必须的注册回调函数关联按键名“Button1”和判断程序“button1_callback
    2 @) J. ~/ n: x
  167. }, J* f9 ^+ L; P; Z! \. P
  168. void dataRead(const String & data)4 W2 |' }4 X% d+ c/ T6 a
  169. {8 H) _4 Y! _9 G" z
  170.     BLINKER_LOG("Blinker readString: ", data);
    1 X6 N' y3 |3 a. i% ~
  171. 6 E7 U) t; a  f2 ?6 P; F  J7 }
  172.     Blinker.vibrate();0 E) k9 V- t4 W- Y$ t+ L8 Y
  173.     & w9 Q6 f) F, d( c
  174.     uint32_t BlinkerTime = millis();
    & M' x" D( y& k2 p8 U! J# M& H/ X
  175.    
    3 i# {  X- R; u. b# E" M$ j% D
  176.     Blinker.print("millis", BlinkerTime);9 A" i9 n; T; ^4 Y4 e
  177. }
    & v  H: R# B, [9 c. b$ P
  178. void loop()4 i3 p# Z( Z+ X7 Z1 a8 I, R& L! G
  179. {
      J2 e* \& d0 s
  180.   Blinker.run();
    ! ]1 X0 i/ N8 [4 G) v5 y, |6 p
  181.   if (digitalRead(key)==LOW)% V3 `, ]3 v9 _9 S% L3 I( J4 O& f
  182.   {
      ?, n; _) `: ?! y- k- ?% `% D2 R
  183.     Blinker.delay(200);
    ! t( Q( W7 ?( A
  184.     if (digitalRead(key)==LOW)
    7 J- w! \8 S4 ?; ~; }
  185.     {
    * u( {& |+ J7 w" H) ^& P
  186.           if (digitalRead(kg)==LOW)  u5 G( A" `+ k1 C
  187.        {
    & D2 m) O& L/ W% r) J
  188.             : D9 c0 |: i& G, U' d) m1 v( A
  189.             digitalWrite(kg, HIGH);
    * r3 G) U6 J, {
  190.             digitalWrite(de, LOW);
    1 `4 [6 v" {1 i' {0 i7 X: B8 K3 O
  191.             Button1.print("on");
    * ^& j8 q2 k6 A  }
  192.             Button1.color("#0000FF");              //设置app按键是浅蓝色; o. w6 V6 M& U: u5 ~
  193.             Button1.text("开启中");* k" b" m1 w' y6 s% ~
  194.        }' c2 K: n3 n" M* Y% ?0 S( G. P, Y
  195.        else if (digitalRead(kg)==HIGH)5 j( w2 R' A/ e
  196.        {
    % w; y* I3 G- o3 [
  197.             digitalWrite(kg, LOW);
    7 w7 g! d' b3 @) E5 k, R0 L
  198.             digitalWrite(de, HIGH);
    : J; G6 p, t8 B: U5 G0 ~% o
  199.             Button1.print("off");
    ; W1 G/ W  G) b! E  U2 T7 n
  200.             Button1.color("#00FFFF");              //设置app按键是深蓝色
    ( A, h9 b3 C* ?) w7 F
  201.             Button1.text("关闭中");5 L* I) O: F( p6 L/ z
  202.        }
    9 {' G5 \0 V% w- p9 w
  203.       }0 N8 ~# u+ B+ O/ y' p2 m% k8 R, M
  204.     }3 A2 q$ l: V* v
  205. }
复制代码

2 b# s0 ^3 l4 n% p$ T% |* V
5 F/ I! `: \2 {( T- q我没有用卖家给的码,我自己写了一个,参考我前面的文章最简单的8266天猫精灵控制开关,点灯、Mixly可视模块化编程 https://bbs.nasdiyer.com/thread-18755-1-1.html
  t  M) K7 D/ g( c6 N$ v8 y/ G2 G: V& p: z* g" k' `
把上面的2改成5,把高低电平对调一下就可以使用天猫精灵来控制你的这个插座了。我是把我的第一个插座放在了我的落地电风扇中了,当我慵懒的在沙发上刷着手机时候感觉有一点点热,我只要呼唤“天猫精灵,打开风扇”,就可以了。$ M4 ^" ^6 b  Q5 B+ b" W: `; B
2 i+ G4 t3 `) H; r4 V+ E- h& ]
  d2 U* k  e( [

0

主题

18

回帖

85

积分

初级渣柚V2

积分
85
QQ
lucky999777 发表于 2021-8-23 13:06:07 | 显示全部楼层 IP:–浙江–台州 电信
高手,没玩过!达人

2

主题

11

回帖

62

积分

初级渣柚V2

积分
62
QQ
a467913252 发表于 2021-8-24 15:53:16 | 显示全部楼层 IP:–湖北–武汉–江夏区 电信
买了几个   做工挺扎实的,但是外壳怎么拆啊  拿斜口钳拨了一个,   四个圆角的卡口根本没法正常拆

11

主题

51

回帖

209

积分

中级渣柚V1

积分
209
QQ
 楼主| 易记 发表于 2021-8-24 17:20:24 | 显示全部楼层 IP:–浙江–嘉兴–桐乡市 电信
a467913252 发表于 2021-8-24 15:53/ z, i3 G/ G# g, ]
买了几个   做工挺扎实的,但是外壳怎么拆啊  拿斜口钳拨了一个,   四个圆角的卡口根本没法正常拆 ...
/ O4 R* q( P2 Y. w( Q( t
大力出奇迹呀

1

主题

8

回帖

257

积分

中级渣柚V1

积分
257
sevenup0719 发表于 2021-8-29 08:14:58 | 显示全部楼层 IP:–江苏–连云港 联通
a467913252 发表于 2021-8-24 15:534 T. t2 p! D" K
买了几个   做工挺扎实的,但是外壳怎么拆啊  拿斜口钳拨了一个,   四个圆角的卡口根本没法正常拆 ...

" ?9 k% Z9 R, a. ?  M昨晚拆了一个,废了老大劲,想和卖家说的无损拆下来,不拆个三五个积攒经验,基本不可能

2

主题

11

回帖

62

积分

初级渣柚V2

积分
62
QQ
a467913252 发表于 2021-9-4 23:05:22 | 显示全部楼层 IP:–湖北–武汉–江夏区 电信
sevenup0719 发表于 2021-8-29 08:14! A. b4 F+ l% D* }- X4 Z
昨晚拆了一个,废了老大劲,想和卖家说的无损拆下来,不拆个三五个积攒经验,基本不可能 ...
# x3 B% Z$ J& q
你的搞定没  为什么我的根本没法烧录   连接不上,,用esp01s还没问题的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|小黑屋|矿渣社区 ( 黔ICP备2024020525号-1 )

GMT+8, 2026-5-22 08:01 , Processed in 0.135972 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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