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

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

[复制链接]

11

主题

51

回帖

209

积分

中级渣柚V1

积分
209
QQ
 楼主| 发表于 2021-8-21 13:57:54 | 显示全部楼层 |阅读模式
本帖最后由 易记 于 2021-8-21 14:05 编辑
- v4 H3 K" p' G4 B8 ]& |
, q# _" v. _. @8 m! N. P最近玩ESP8266,想做个天猫控制开关。
/ F# y. a/ n: O/ i0 E- [& T但是我很懒,一个个配元件嫌麻烦,于是想着能不能淘到便宜的带电源板的模块,多倒是蛮多,一般都要20多块钱。
1 O% ?, M) U5 h" s还是闲钱上逛一下看,找到一个联想的国外版8266智能插座,价格才8.5元一个。有一点不足,就是只有三孔,要是五孔的就好了。老板说五孔杂牌价格一样也有货,晚两天发布。
1 m6 E" A/ E% G7 `8 w* s5 j QQ截图20210821125037.jpg : R0 |7 K; U/ c2 y) {8 T* S8 N: A
1 j* {# ^8 A; m+ A1 `
' P8 c$ a' L" C$ r: o" i
问了一下店主,买20个一盒才包邮,想着20个还是有点多,买了5个,连运费47.5元。
9 t* O1 e9 i$ z5 s) W1 l) h4 G1 Q+ |- p) v& K( G$ P4 J- w. h
QQ图片20210821124517.jpg + U. J$ X' H6 _4 s

7 C" v' V' O: I2 ?; \! t; r  S% T% b% R8 i) {0 p
2 z2 v6 E  v  z4 |% |8 b9 z. a9 r
到手,当然是拆拆拆。% r7 h4 ^% t- f* {- M! @
IMG_20210820_134104.jpg
2 ]+ z1 T# q7 Z  @7 |2 v
0 w1 z$ o( `: V) ]

" p6 q! n5 Q1 A联想的做工,还是感觉不错的,光这个继电器应该也要个7-8块钱。6 S) I+ m$ P# e3 b" k3 X
IMG_20210820_160634.jpg * o$ \" ~+ j: N

6 J7 l. i9 I& y8 i' w

- a# m' }$ S( D8 w) J- X继电器是两组常开,感觉要是接电灯双控开关是不是有点麻烦的,不过用于插座是很安全,要断二条线都断开。; W+ q0 q) F& Z* _3 c) }2 n
QQ截图20210821133707.jpg
1 ^* Y+ ^+ N& w& V0 w! ], W$ X
7 X) E2 ]; D. g8 `
IMG_20210820_134114.jpg * z( [( i0 u" a, U0 [+ S
3 I8 X9 D8 U! L8 t# i- _
电源芯片, g. O0 R; c  j, c; q1 Q" J

' e! e4 s# f! n4 a& b) s
* q( \& H! q. f3 B9 L1 o, Z- w
+ v& u7 }: d, }2 q7 e# _1 @2 p: \
有一个按钮,按钮有二个蓝色LED灯
. b+ u3 }' j6 l# s, a) P IMG_20210820_134157.jpg
% \) _* ~. L9 l% J; }
. i5 `" ^; ~% o1 v; c9 v0 l- G

* |6 y& s+ c/ u" D/ ~  o8266
8 `; {, P' [0 E% ^/ d) ]$ x IMG_20210820_141913.jpg 2 n3 n2 q0 O+ U$ e6 D0 `: V
; y; |# g7 W3 {* v" Y  g

/ x- y2 [/ |+ ~" A
, {: V2 N8 g' s
0 A5 e* Q, b* |) X  Z- E
接下来就是刷机了,版子上面都预留测试点。
* t/ a8 G# J9 K8 Q3 F) R3 f6 X$ G; R接线比较容易,上面都有标示,GND,3.3V,TXD-RX,RXD-TX,还有一个就是IO0接地后刷机。
2 y; }" @3 G0 s' P: E3 ] 未标题-1.jpg
6 i! A: L* t3 U' x& w
注意RX这个点,就是3.3V边上的这个点,焊盘设计的就点问题,电烙铁热一点或是焊的刷机线过粗的话,容易掉焊盘。$ {% y- w6 ?( z, q- }
要是掉了就只有一个过孔了,要是焊不上,只能再拆开接在另一面,所以为了避免不必要的麻烦,请注意一下。

8 E# f  _2 P6 z- T& Z( o2 h3 D6 `4 j& G" H

: A* T' M1 d9 o- M# _# z
- t# i6 n2 ]7 g2 F. |+ }

! ~, G1 s8 K6 b- r( Q  ~

- s! h# T9 ]5 f7 h, B    5号脚位是继电器输出
7 G  ^; Y5 s: |    12号脚位是灯输出& a# f+ @1 l  p) i
    4号脚位是按键

1 [7 Z% W2 H) m
( j! O# D3 u4 e- l

. G+ b2 ]: v- w$ O) _7 }" v: T/ _0 w3 b7 L
7 ^: [( M+ P  r' B$ `2 l7 u
卖家有发一个源码,如下
  1. #define BLINKER_WIFI                    //官方wifi协议库
    7 j  s$ V# h" Z
  2. #define BLINKER_MIOT_LIGHT              // 设置小爱灯类库
    0 ?& @" e' Y+ N) U: C, U- W
  3. #define BLINKER_ALIGENIE_LIGHT          // 设置天猫灯类库
    4 Q( |' n+ r, Q$ ~
  4. #define BLINKER_PRINT Serial            //串口协议库
    ' G- s; _0 h2 B" O8 R; ]) }
  5. #include <Blinker.h>                    //官方库
    ' g7 x- {5 _( p* P- G
  6. #include <ESP8266WiFi.h>                //官方库- T  O/ Z8 _! C2 H& O4 A, Q
  7. WiFiServer server(80);                  // 服务器端口号
    9 z+ }- j9 v  ^; w1 q
  8. . b2 t3 y! i) Z7 }$ v1 ?
  9. char auth[] = "c4942fb1d5e4";     //设备key9 X* y2 j2 f9 n0 r7 I! Z' }
  10. char ssid[] = "wanboshi";     //路由器wifi ssid1 g" d. W- ?1 l, s2 A8 p" w
  11. char pswd[] = "1365662999813586348220";     //路由器wifi 密码
    - e& w- f0 z  _- X0 z: s" |) \

  12. % d& P1 U+ L% w3 E- ?
  13. bool oState = false;. L+ i4 c9 h& ?

  14. 6 B' u/ U7 X3 @: l9 q& h+ Y
  15. int kg=5;//继电器输出; m1 U5 A/ ?/ C9 L! E/ |
  16. int de=12;//灯输出' X& u6 S$ v! u; ^" F
  17. int key=4 ;//按键/ V7 n8 a0 k" Q- \
  18. //*******新建组件对象
    ) U" y. p" P* T5 J4 d0 [$ G

  19. 1 A: z2 O* E7 @$ F7 A2 A7 g
  20. BlinkerButton Button1("btn-abc");              //设置app按键的键名) S5 d. f; o7 r4 g
  21. //*******app上按下按键即会执行该函数app里按键( r5 P& }1 n6 j$ m8 P
  22. void button1_callback(const String & state)
    * x9 E9 \* i: i& B+ k  ?
  23. {
    2 ?0 i9 F/ K7 l4 @! _
  24.    if (digitalRead(kg)==LOW)
    . T# }& Z2 i6 j* s: `8 m! t; }. Z
  25.    {
    1 q6 a6 z' h+ E% @- Z
  26.         BLINKER_LOG("get button state: ", state);$ T( x$ B0 v  c+ B
  27.         digitalWrite(kg, HIGH);
    & e6 }7 J- h/ I, J/ _- R0 _# N
  28.         digitalWrite(de, LOW);
    $ O8 y4 ]! L) B! V9 B
  29.         Button1.print("on");  J. i% C' F* I3 d0 Q
  30.         Button1.color("#0000FF");              //设置app按键是浅蓝色: p# p9 K! ~# R% P# P8 c/ `
  31.         Button1.text("开启中");
    ; C4 K/ r3 @' V( H( F/ Q* l
  32.    }
    / @. J  i# i4 U9 w6 E
  33.    else if (digitalRead(kg)==HIGH)) t& \, t+ r' d" L
  34.    {
    1 r% U, I- I4 J4 \0 Q
  35.         BLINKER_LOG("get button state: ", state);
    4 g5 Z8 x5 H( B3 `2 y( A& v1 W3 S7 [
  36.         digitalWrite(kg, LOW);7 s/ V, j. G6 ]/ V  {
  37.         digitalWrite(de, HIGH);3 {) I6 n4 ~& F" k4 _
  38.         Button1.print("off");
    ; J. c. a5 ^7 X7 ]
  39.         Button1.color("#00FFFF");              //设置app按键是深蓝色: J! H& X- s. \
  40.         Button1.text("关闭中");
    ) v9 m$ V( e' N" O  y9 K# O
  41.    }
    ) X# Z1 E! L$ D* |
  42. }; m3 Q+ {9 k9 @% A4 `6 M* B( t9 L

  43.   Q0 |7 H/ j- \/ j2 F# Z
  44. //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      p( [/ z2 Q4 H' t: b. Z4 b
  45. ' X" R$ l/ m5 k; Q
  46. //*******如果小爱有对设备进行操作就执行下面
    9 G& r  k% m2 \- _7 w6 V' q7 ~
  47. void miotPowerState(const String & state)
    & ~  B7 Q! c1 W" t
  48. {
    $ Y- l, r/ c! H, d+ Y' x0 o& k( J
  49.     BLINKER_LOG("小爱语音操作!");              //串口打印0 }" p+ ~4 [! c
  50.     if (state == BLINKER_CMD_ON){
      A% N! Y4 {! Q! g) R+ J
  51.         
      y) h9 n4 L1 K1 E$ _( }5 W% B
  52.         digitalWrite(kg, HIGH);+ ?/ V5 r  H% p( j6 @- z
  53.         digitalWrite(de, LOW);
    + B6 o1 u& h2 K% Z, B- y
  54.         Button1.print("on");+ o( u1 |1 b6 s3 @' |- M# \1 _" v% u( \$ L
  55.         Button1.color("#0000FF");              //设置app按键是浅蓝色, I* E" z' a1 ^: d
  56.         Button1.text("开启中");' N$ ~6 {, S( o- F) ~! O3 F3 z
  57.         BlinkerMIOT.powerState("on");5 U3 h5 r& @5 L+ c% l3 u& R
  58.         BlinkerMIOT.print();+ o+ W$ s' S. _+ v2 \+ q* A5 ~
  59.    }
    * a: _9 @$ I3 Z4 M
  60.    else if (state == BLINKER_CMD_OFF): o; h* ^8 O. k- _, c, X% z$ u7 J
  61.    {6 ~7 L" G! ?3 ]
  62.         . T, F( H5 a! U! t5 y, W& j. s4 F
  63.         digitalWrite(kg, LOW);# X1 p0 t) q0 P
  64.         digitalWrite(de, HIGH);
    : Q8 k( H" |3 Y7 H: g, [1 G
  65.         Button1.print("off");
    5 v2 o0 `" A0 S8 r+ @# d
  66.         Button1.color("#00FFFF");              //设置app按键是深蓝色
    % g: ]2 \! a7 N
  67.         Button1.text("关闭中");
    & k# Y4 h( j- m  t& S- `: E6 L, D0 x
  68.         BlinkerMIOT.powerState("off");# O. z6 O2 |7 j/ |1 X' h0 a
  69.         BlinkerMIOT.print();& K/ d; r6 \& N. t* z2 r  y2 ?
  70.    }2 [4 E9 k. E) u/ N/ p
  71.        1 W" u+ g( a$ m8 z2 q9 v7 A

  72. ' E$ `: m: {1 A. f+ E. e7 x
  73. }
    / y) p! J% A( y7 g) p8 w
  74. //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    7 }+ l5 T2 t# e& R! p1 C
  75. //*******如果天猫精灵有对设备进行操作就执行下面7 @, p0 g; p: y) ^6 C- C) X0 }
  76. void aligeniePowerState(const String & state)
    . i" A; o/ Z# c8 c
  77. {
    6 f. V, D( k2 G* ]; P( C' j/ }
  78.     BLINKER_LOG("need set power state: ", state);! ^) p, }, N$ E8 B  W! e8 y
  79.     if (state == BLINKER_CMD_ON)
    0 c4 B: e2 S; v, X8 ], n6 }/ O# Z9 M
  80.     {
      X  ]9 k: p/ w
  81.         
    8 z8 x9 L% S! ]- Y) Q$ R' e
  82.         digitalWrite(kg, HIGH);- W) K% }+ K# d- ]- _6 \4 o% B
  83.         digitalWrite(de, LOW);
    ; G0 k5 q0 ?8 v1 E5 N
  84.         Button1.print("on");7 j3 i' d; Y0 p7 M2 @" V8 C1 o
  85.         Button1.color("#0000FF");              //设置app按键是浅蓝色
    7 |& C8 v+ y3 _, w
  86.         Button1.text("开启中");
    % M3 N( {) m. d& R) H6 z, p$ l* f
  87.         BlinkerAliGenie.powerState("on");
    & b* D! @+ ]8 T5 V% ?
  88.         BlinkerAliGenie.print();
    # C3 W  U, _: W
  89.     }
    $ ~! p- B4 W) j3 n4 V. t
  90.     else if (state == BLINKER_CMD_OFF)4 V# ~% G0 ]& j2 u( f
  91.     {% E9 b$ g% e0 M( T8 y9 V& C0 K
  92.         " @/ `0 D$ x9 M; L3 z0 Q- L! c
  93.         digitalWrite(kg, LOW);
    ' e# |1 @4 X. o" A6 Z" {8 q) l
  94.         digitalWrite(de, HIGH);
    9 C7 H: {0 ^8 G- U
  95.         Button1.print("off");( {  b  W2 a% R$ K$ r. I, V
  96.         Button1.color("#00FFFF");              //设置app按键是深蓝色) Z) \$ h/ f/ q0 g$ L; j& a
  97.         Button1.text("关闭中");
    + _2 o" K8 z2 d" \1 M9 c
  98.         BlinkerAliGenie.powerState("off");( g8 W  A0 C; C, K
  99.         BlinkerAliGenie.print();8 g; q: O. G# ^+ l" c" @
  100.     }" F. D' _' u4 {+ f2 @9 s/ J' @1 _2 A" z3 _
  101.         
    4 y# \+ w; a8 a8 T3 n# f

  102. / M7 p) T# e$ [9 y- P  o& g
  103. }
    $ p$ U! o) m* x5 A
  104.   //*******app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态30s~60s一次
    : ~* p% O3 \% x7 M/ C7 N
  105. void heartbeat()
    ! y5 [( o# }" a9 R7 W) {
  106. {/ U; Y0 Y! l& ]$ U7 N" C3 x5 Z1 o
  107.   BLINKER_LOG("状态同步!"); 9 |' a) n3 s( l6 }3 M" Z; `
  108.    if (digitalRead(kg)==HIGH)
    9 v: J0 u: X7 ?" S
  109.     { . |0 J4 y( m6 W& K2 k# f
  110.       Button1.print("on");
    1 p; l6 ~9 I5 E# B) S4 @% u
  111.       Button1.color("#0000FF");              //设置app按键是浅蓝色
    . k$ o; g: p5 O- o+ V
  112.       Button1.text("开启中");
    8 y* Q* A6 z: a8 x
  113.     }+ ~2 [) k0 H  B4 F4 e7 o" F7 `% p$ C
  114.     else 9 L9 k5 a3 }, ^* E+ T
  115.     {
    ! O. h& d' ~; e" k$ k# q4 i3 A
  116.       Button1.print("off");
    + ^: l4 }3 k$ r) G. n4 r
  117.       Button1.color("#00FFFF");              //设置app按键是深蓝色9 _9 y; f6 P6 d  X5 @8 C
  118.       Button1.text("关闭中");! ?- Y3 x8 {( {9 F) A4 F6 y; d
  119.     0 K) L3 {6 c; n' H6 ]
  120.     }
    ; `3 m$ R! n+ F/ ~1 ~
  121. }9 b7 E5 A" v4 ^
  122. //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++9 S  w+ e; P; P, Y
  123. void setup()2 A2 x  R. Y! U* k' c2 G# \% b
  124. {
    " C" M+ h8 J8 _: {/ a
  125.   // 初始化串口
    , ^/ p: J) D& o
  126.   Serial.begin(115200);! G3 n$ c* a1 J
  127.   delay(10);/ v8 J: H$ r5 F' a- F( f
  128.   BLINKER_DEBUG.stream(Serial);4 h* h+ Z/ A: [
  129.   // 初始化有LED的IO
    ! E& {8 h# G& ?2 [8 |0 g
  130.   pinMode(kg, OUTPUT);                 ; h1 ~* p' k* ^3 T, V
  131.   digitalWrite(kg, LOW);//初始化继电器上电状态 ( g0 s5 t* w  H7 h2 K. n& y
  132.   pinMode(de, OUTPUT);
    3 z( ]) ^& E- ~9 [, \, R  w; f
  133.   digitalWrite(de, HIGH);) Z, F: L) V% p* J' [) b9 f; M
  134.   pinMode(key, INPUT);            ( \- \3 _. ~7 p: z& ]+ p
  135.   Serial.println();
      C8 h* {5 h% `+ r. W) \) u
  136.   Serial.print("Connecting to ");
    3 \  h+ h" F' ~/ F
  137.   Serial.println(ssid);- P  k( E) j. C! Y
  138.   WiFi.begin(ssid, pswd);
    1 d2 y( a3 q7 R  z0 I0 ~
  139.   while (WiFi.status() != WL_CONNECTED) {5 P9 V7 Z* G3 I8 ~: H
  140.     delay(500);: N) n4 k/ G  N6 M
  141.     Serial.print(".");; H. \. p: C' J4 \. O
  142.   }
    , a$ r' x6 A& X8 a! v0 b4 {; X3 C! s
  143.   Serial.println("");9 y& q4 K. n7 I( a; w
  144.   Serial.println("WiFi connected");4 h' E0 _6 i" d& N
  145.   server.begin();0 ]) Q; V& M- Z
  146.   Serial.println("Server started @ ");
    8 k% o2 {; r: m: ~4 X5 G
  147.   Serial.println(WiFi.localIP());
    ' [* U( Q" G! d% d" o8 b
  148.   //打印出IP地址,后期可以制作显示器来外部硬件显示ip3 }+ t/ P# j4 A* ?3 p9 `: W
  149.   Serial.println("To control GPIO, open your web browser.");
    3 P, \4 S, Q) e9 u/ f* I2 `
  150.   Serial.println("To set GPIO 0 high, type:");4 @  T: P  Z4 r4 {
  151.   Serial.print(WiFi.localIP());
    9 |; P" Z0 a7 G! t4 [
  152.   Serial.println("/gpio/1");3 {  I# Q' k7 L8 O' y; s3 j- h; \
  153.   Serial.println("To set GPIO 0 low, type:");
    ; ^6 X  r* \# x
  154.   Serial.print(WiFi.localIP());0 J( l5 d# x- A
  155.   Serial.println("/gpio/0");; k- ?3 T/ @4 v6 ?) |% p+ t; z% u. r
  156.   Serial.println("To toggle GPIO 0, type:");5 v" _7 A8 Z; O: |) ]
  157.   Serial.print(WiFi.localIP());1 R' |* ?& A& ~3 |
  158.   Serial.println("/gpio/4");
    ) M7 D: }% y. r$ a' Z" p5 I
  159. ) X. k( E' P  E  ~( u" D( N! N. F
  160.   // 初始化blinker
    ) W, G/ O, L6 F) g* b
  161.   Blinker.begin(auth, ssid, pswd);
    : Q- e! w" `4 _( ]0 l1 x% L5 D  }; p
  162.   BlinkerMIOT.attachPowerState(miotPowerState);              //小爱语音操作注册函数  u! k1 G; W( W1 b# y1 n+ f( P
  163.   BlinkerAliGenie.attachPowerState(aligeniePowerState);      //天猫语音操作注册函数
    ' b! [8 |4 g8 a. n; v$ X
  164.   Blinker.attachHeartbeat(heartbeat);              //app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态进行语音操作和app操作同步。
    0 p: N+ _+ v! F4 C5 i

  165. 7 J6 z8 n$ d% u6 V$ r# F7 J, [
  166.   Button1.attach(button1_callback);             //app上操作必须的注册回调函数关联按键名“Button1”和判断程序“button1_callback8 g2 _8 `3 }" M- B' J5 l7 [2 X
  167. }
    * T* b' l, ~5 `9 z4 }8 a
  168. void dataRead(const String & data)1 r( J) ~5 Z) K) y
  169. {3 f8 ?# q; N  D% y3 z, N4 e
  170.     BLINKER_LOG("Blinker readString: ", data);$ |4 X' ~, O) q9 p( C
  171. * `1 t# I5 _; ]# i6 f! p3 O6 }& V
  172.     Blinker.vibrate();9 G3 C% R2 Q, s' V! Z) u+ t2 K
  173.    
    4 G+ ?" u/ q' H3 P4 J
  174.     uint32_t BlinkerTime = millis();
    5 _; B! N# y$ u' o& o8 O7 Z9 G% w
  175.       U" z) J  p9 i! G+ J) @" t
  176.     Blinker.print("millis", BlinkerTime);0 K& ~; n! }" E: k8 D7 Z( M
  177. }
    + ?& F' [& Y: @: h4 O, b
  178. void loop()
    6 m) T2 U9 Z, l6 f( P6 k
  179. {
    ! \" r  L! z/ [4 S  i
  180.   Blinker.run();7 {2 u7 B, M/ `! U% N
  181.   if (digitalRead(key)==LOW)2 r; t" g1 q/ G4 y1 Y; o
  182.   {- F3 S; |9 r3 w! y, ]  a; x
  183.     Blinker.delay(200);3 R- E8 ^& V* w- ]* F) ~, ?& b& V$ u
  184.     if (digitalRead(key)==LOW)! R5 f" ]0 X! H4 w- k7 L
  185.     {
    / q  j4 _  N4 ~/ q, ?
  186.           if (digitalRead(kg)==LOW)* N* V) ]1 P' s6 v+ x8 ]$ ?
  187.        {
    4 [1 v  e+ K9 u
  188.             6 e) h. |) N+ C/ y" M
  189.             digitalWrite(kg, HIGH);
    " d% `( q  ]) k% Z; N) w! E
  190.             digitalWrite(de, LOW);
    0 _% k8 h- d) P
  191.             Button1.print("on");- E1 u, z5 x7 ~) q) k6 @! v
  192.             Button1.color("#0000FF");              //设置app按键是浅蓝色: b9 O) q' b8 G& g# K
  193.             Button1.text("开启中");" f: |& V( i% d
  194.        }6 E) }4 R9 V5 S# O4 D* o
  195.        else if (digitalRead(kg)==HIGH)
    . N4 Z7 a- o, Z# J3 i: ]( i+ o7 X
  196.        {* C9 R6 A' m1 [4 A) F) i( e
  197.             digitalWrite(kg, LOW);0 {( s5 j5 u5 q7 P; W8 e
  198.             digitalWrite(de, HIGH);  |. \/ a: U, v$ f" b' y
  199.             Button1.print("off");
    * z5 S" j- T6 }
  200.             Button1.color("#00FFFF");              //设置app按键是深蓝色
    2 o* O' [* P, {2 e% I! ~
  201.             Button1.text("关闭中");3 N8 y# X& H( J! a& ]
  202.        }$ E: z) P8 O9 r' ?$ R' A6 t
  203.       }& `' _/ E& ^+ B+ `$ U( u9 i5 Z$ D
  204.     }
    + I3 x; D  M# R9 q* x( v# ?0 s
  205. }
复制代码
7 S& l/ n+ h) P9 E
9 ]7 T6 S9 q1 v/ K
我没有用卖家给的码,我自己写了一个,参考我前面的文章最简单的8266天猫精灵控制开关,点灯、Mixly可视模块化编程 https://bbs.nasdiyer.com/thread-18755-1-1.html
% z3 E9 H. `/ T; f( o
5 q" E, t& |$ }" O$ G# Q把上面的2改成5,把高低电平对调一下就可以使用天猫精灵来控制你的这个插座了。我是把我的第一个插座放在了我的落地电风扇中了,当我慵懒的在沙发上刷着手机时候感觉有一点点热,我只要呼唤“天猫精灵,打开风扇”,就可以了。* i6 s" H' M8 X2 a) u( \  `
( Q: S1 z! x1 ?0 }8 p$ z

5 v: }$ ?. j0 j7 f8 E" Q. R

0

主题

18

回帖

85

积分

初级渣柚V2

积分
85
QQ
发表于 2021-8-23 13:06:07 | 显示全部楼层
高手,没玩过!达人

2

主题

11

回帖

62

积分

初级渣柚V2

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

11

主题

51

回帖

209

积分

中级渣柚V1

积分
209
QQ
 楼主| 发表于 2021-8-24 17:20:24 | 显示全部楼层
a467913252 发表于 2021-8-24 15:53! L6 H& u8 Z3 x
买了几个   做工挺扎实的,但是外壳怎么拆啊  拿斜口钳拨了一个,   四个圆角的卡口根本没法正常拆 ...

- J6 q, P9 j  w大力出奇迹呀

1

主题

8

回帖

256

积分

中级渣柚V1

积分
256
发表于 2021-8-29 08:14:58 | 显示全部楼层
a467913252 发表于 2021-8-24 15:539 L; Y- e& ]% G4 S9 y; s8 M7 C
买了几个   做工挺扎实的,但是外壳怎么拆啊  拿斜口钳拨了一个,   四个圆角的卡口根本没法正常拆 ...

( e, V' z2 W' X9 V昨晚拆了一个,废了老大劲,想和卖家说的无损拆下来,不拆个三五个积攒经验,基本不可能

2

主题

11

回帖

62

积分

初级渣柚V2

积分
62
QQ
发表于 2021-9-4 23:05:22 | 显示全部楼层
sevenup0719 发表于 2021-8-29 08:14
4 _6 M4 s% B, ]9 ]/ i昨晚拆了一个,废了老大劲,想和卖家说的无损拆下来,不拆个三五个积攒经验,基本不可能 ...

0 D$ {9 Q" y* h! o' b1 u" o' H! s/ @你的搞定没  为什么我的根本没法烧录   连接不上,,用esp01s还没问题的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-21 07:40 , Processed in 0.066264 second(s), 4 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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