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

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

[复制链接]

11

主题

51

回帖

209

积分

中级渣柚V1

积分
209
QQ
 楼主| 发表于 2021-8-21 13:57:54 | 显示全部楼层 |阅读模式
本帖最后由 易记 于 2021-8-21 14:05 编辑 / I' S1 W' o. b+ q" w, u6 t
& a6 b7 U, z% p
最近玩ESP8266,想做个天猫控制开关。
3 o6 X& `; N* U9 o4 q+ p) ]& Y但是我很懒,一个个配元件嫌麻烦,于是想着能不能淘到便宜的带电源板的模块,多倒是蛮多,一般都要20多块钱。) l+ s! t2 |+ K9 \4 F
还是闲钱上逛一下看,找到一个联想的国外版8266智能插座,价格才8.5元一个。有一点不足,就是只有三孔,要是五孔的就好了。老板说五孔杂牌价格一样也有货,晚两天发布。$ \8 J' b9 s4 m# [& q
QQ截图20210821125037.jpg , l2 y  c; C  A' J" H
; V- Y) E/ K$ z: y
8 S3 V9 s2 ]4 J0 T$ I
问了一下店主,买20个一盒才包邮,想着20个还是有点多,买了5个,连运费47.5元。) z/ n/ k3 G8 |9 k
3 H% ~, Z7 O- X! |" |
QQ图片20210821124517.jpg + e4 ~8 D1 K+ \7 P- y: ?
$ }) z  N) L( ]  P$ e- e3 {

- j9 N, O) o7 A# e5 ?

! a% b/ n; n0 d9 t到手,当然是拆拆拆。
: k' V, X; t; m4 h5 ^/ r IMG_20210820_134104.jpg - u5 R6 S3 d3 c, t' ^  u
6 r' N6 H% i' a

( H0 S) {# e2 ?联想的做工,还是感觉不错的,光这个继电器应该也要个7-8块钱。
/ ~& i4 w2 ~% n4 ]$ R7 O! y IMG_20210820_160634.jpg
  c4 B9 a8 ?0 v: H/ ~; b% h, X$ n% k* i4 q: A* i6 H7 ]/ p2 {

1 N- w, B/ q; @% m+ O继电器是两组常开,感觉要是接电灯双控开关是不是有点麻烦的,不过用于插座是很安全,要断二条线都断开。
& B) s9 P/ G8 Y8 U$ Z2 S6 b QQ截图20210821133707.jpg 3 l3 ]1 ^' w  _" m  b
/ v( l) Y6 [' q
IMG_20210820_134114.jpg
5 `# l6 }' }% u# N
, _' {7 l, o( O: k) y/ Y2 c
电源芯片" H- O# V* X' @3 h! I- ?- {

& s' B( Z( Q" [! _# k) k" v8 `0 I8 R, P! Y2 N3 [0 }

2 x9 X- O% h& B" x% w: M$ o有一个按钮,按钮有二个蓝色LED灯
4 ?. Q0 I8 C9 L5 }' s/ L) m IMG_20210820_134157.jpg 2 R" {5 V/ p7 C% K- V
9 d+ F8 d3 u- Z7 C# y& z
+ f) O& ~% l% d- ~9 x" D+ G
8266
2 K" A6 F$ ^" D; Y" K IMG_20210820_141913.jpg
) n% P. E" N3 s9 A4 i
4 _" P" l1 ~, y9 i6 m6 k- i
! g, {& @, a8 D; r  T. g

3 _: Y' L  J6 G2 ~# _7 E( O

; j% `' M/ p1 t' g7 b' ^接下来就是刷机了,版子上面都预留测试点。
# O* s2 p% Z( i8 z& F" a* p; Y接线比较容易,上面都有标示,GND,3.3V,TXD-RX,RXD-TX,还有一个就是IO0接地后刷机。% R" Q0 ^- ]- I: U
未标题-1.jpg 7 M& Q! q8 s* g# J9 b
注意RX这个点,就是3.3V边上的这个点,焊盘设计的就点问题,电烙铁热一点或是焊的刷机线过粗的话,容易掉焊盘。
! D- B2 S3 ]+ _/ _2 s9 g要是掉了就只有一个过孔了,要是焊不上,只能再拆开接在另一面,所以为了避免不必要的麻烦,请注意一下。
9 e6 ^' |; O! u

2 O( u; T. _% P
7 `) b7 G% t$ w/ G
* l7 k! s$ [; h0 q5 O: V8 r
( J/ G+ F' _* W) j0 A8 S% [* w/ X

7 }6 X! k! E/ H  o+ j+ G4 _    5号脚位是继电器输出! ~2 [  G# Z: C9 V; \$ y8 s' a7 }& F' h
    12号脚位是灯输出; N/ c4 e0 k  t2 Y" @
    4号脚位是按键
/ w! z0 F$ x) h' K) ^

7 r4 |% ~4 M# D/ w9 f0 K& o6 e" m; ]
& s' ~" i( f& D3 Q" X# w! m

. n( m: P4 z* G% t8 q$ T# f
& b* z7 Z3 C, `
卖家有发一个源码,如下
  1. #define BLINKER_WIFI                    //官方wifi协议库
    & I% l* s" J- S3 Z
  2. #define BLINKER_MIOT_LIGHT              // 设置小爱灯类库
      [' y8 S7 I( f4 [  d3 i7 G
  3. #define BLINKER_ALIGENIE_LIGHT          // 设置天猫灯类库
    6 u4 r( U) a" B" x# m
  4. #define BLINKER_PRINT Serial            //串口协议库5 [7 S; P: r+ H7 M* v% }8 Z
  5. #include <Blinker.h>                    //官方库
    ' L' ~& O* Y( e: z# f3 Y
  6. #include <ESP8266WiFi.h>                //官方库
    & l) I7 H5 ~7 |, C; Q- `( [
  7. WiFiServer server(80);                  // 服务器端口号
    # _6 k8 Z. C+ k; P

  8. " V8 c6 A" N. x, w# @+ N
  9. char auth[] = "c4942fb1d5e4";     //设备key, W. e9 e. G1 C
  10. char ssid[] = "wanboshi";     //路由器wifi ssid
    + I5 b$ N  p+ N
  11. char pswd[] = "1365662999813586348220";     //路由器wifi 密码) ]7 o) p9 S0 w5 w
  12. 8 x- L- ^" B- O
  13. bool oState = false;
    . f0 h! G4 i' t5 w

  14. 9 q1 M4 T4 o, r. U' ?- v5 o; J
  15. int kg=5;//继电器输出& t& C- O) e$ ~# p, }
  16. int de=12;//灯输出& U8 N8 n& d; n, ?" h3 V* p
  17. int key=4 ;//按键
    ; e/ L1 ]/ q' Z8 J9 @3 ~( q
  18. //*******新建组件对象: C" B0 K; j* l& u% @
  19. 1 |" Q  b6 k* Q) P4 Y! Z
  20. BlinkerButton Button1("btn-abc");              //设置app按键的键名" C. q* n* D2 |) \: x7 l* o( K
  21. //*******app上按下按键即会执行该函数app里按键
    ! N* t9 s5 f( e1 @$ p( x# p7 M
  22. void button1_callback(const String & state)4 t7 M( T4 |" |
  23. {% \4 _' P, O3 ?; D9 A7 }. m
  24.    if (digitalRead(kg)==LOW)  \# v, R) D% h" I1 b
  25.    {
    ' V3 A7 _6 ~, E1 m7 z6 B7 V. M
  26.         BLINKER_LOG("get button state: ", state);" [( W6 L4 L: Y2 \- R- @3 g
  27.         digitalWrite(kg, HIGH);
    + L' z7 H) g' Q. `" z3 Q5 @
  28.         digitalWrite(de, LOW);
    6 k+ D9 v& v2 Z/ |- Q
  29.         Button1.print("on");
    ' M; K" S9 X( h/ d7 `  S
  30.         Button1.color("#0000FF");              //设置app按键是浅蓝色( S1 J& T9 V/ ^
  31.         Button1.text("开启中");7 S9 D- q, z) N
  32.    }
    ; f) T% Y, P, h0 A0 R# J+ }8 S5 [
  33.    else if (digitalRead(kg)==HIGH)
    ) Z% |7 F# D5 P( N. v  Z# r" M
  34.    {! n/ F* _# @* A. w, N0 l0 F
  35.         BLINKER_LOG("get button state: ", state);
    7 g* Z9 e9 Z6 U+ L, c8 O
  36.         digitalWrite(kg, LOW);
    ) v" c2 L/ z4 H5 S; e) r# Y  k4 M+ U
  37.         digitalWrite(de, HIGH);
    ! t8 o& g; A( ^1 l( @% U4 e
  38.         Button1.print("off");
    , |+ e7 u+ W. D% w3 ]% l2 n. G0 l. i
  39.         Button1.color("#00FFFF");              //设置app按键是深蓝色
    + ~4 i) @% K, R# u- d3 i9 p
  40.         Button1.text("关闭中");! ~8 B0 B3 z4 G0 w
  41.    }$ T, D- N+ A" g% W, |' J# y
  42. }- w+ N0 w9 p+ D/ o3 A; F6 ^0 y

  43. % \2 b5 ?/ n7 X- L: t9 W9 T. [
  44. //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    9 d) x" w( o' C  @( l  ]* I
  45. $ A# @7 G; d2 Z4 Z% l& C: ~0 K
  46. //*******如果小爱有对设备进行操作就执行下面5 X3 ^3 N6 C: V( G
  47. void miotPowerState(const String & state), ~( J5 O% f) Y6 f+ F$ z
  48. {4 n3 e5 B6 A4 o; t( K! ]
  49.     BLINKER_LOG("小爱语音操作!");              //串口打印$ c, l3 {. h1 i( e/ o7 F
  50.     if (state == BLINKER_CMD_ON){; e) T) @2 l: Z5 n  l6 x
  51.         
    7 O+ ^7 m' v2 \& w5 X) k
  52.         digitalWrite(kg, HIGH);. B8 U4 `1 h+ P
  53.         digitalWrite(de, LOW);' I% q6 o  X8 R- M" Q, r. ?& Q$ m
  54.         Button1.print("on");! ], L# A" u) w, x2 A
  55.         Button1.color("#0000FF");              //设置app按键是浅蓝色2 Z; g# T8 X0 h4 _3 ]' Z4 B
  56.         Button1.text("开启中");8 ~+ E! j* N5 T6 n! r. c
  57.         BlinkerMIOT.powerState("on");) R) V/ z+ a$ V& b6 K6 ^
  58.         BlinkerMIOT.print();; |& d+ g% E, X2 Z' ]
  59.    }, F4 S  H6 x9 z8 @4 f
  60.    else if (state == BLINKER_CMD_OFF)0 N( R9 w5 r9 y6 c
  61.    {
    ) X- e0 x- C" u$ b( F1 Z
  62.           L/ F) n( s. V' j+ q
  63.         digitalWrite(kg, LOW);
    + U* U# \2 R& V6 _1 F1 m% n
  64.         digitalWrite(de, HIGH);
    8 w# `( C5 H) D, L7 s8 W
  65.         Button1.print("off");4 m# L7 j7 O( k7 ?+ r! i- b
  66.         Button1.color("#00FFFF");              //设置app按键是深蓝色" T8 d$ w: O# j9 g
  67.         Button1.text("关闭中");
    1 o4 Q* a' G3 v0 p
  68.         BlinkerMIOT.powerState("off");
    0 O/ l) ]+ I5 O6 Y$ }& Z, t
  69.         BlinkerMIOT.print();* J3 [( ^- O: t( L6 j1 z
  70.    }: |0 `0 C$ C/ L2 ~, D
  71.       
    $ X$ v3 x0 u' S, e8 n  f

  72. $ H! Y$ D7 f1 I% [
  73. }& n% c7 S3 B- R7 G
  74. //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    / D+ Q/ R1 e1 P8 {, Y: D
  75. //*******如果天猫精灵有对设备进行操作就执行下面' B1 B3 g' v. T4 e% M, G+ m* X
  76. void aligeniePowerState(const String & state)" O5 G) I1 n/ @& F% f8 f
  77. {
    ( F# b; S- w, c) R3 ~7 l' O
  78.     BLINKER_LOG("need set power state: ", state);: K9 E; c3 ^# b1 e% J
  79.     if (state == BLINKER_CMD_ON)6 C8 Z3 i  {) a. I9 Y" \6 U
  80.     {! o8 z* q# r4 g) q/ J
  81.         , Q1 ^: L0 m) G0 h, }) j! K0 Q0 g
  82.         digitalWrite(kg, HIGH);
    ) C0 O# B) a' T2 \& f/ f
  83.         digitalWrite(de, LOW);
    , O5 i# W) D! |% Y& v+ \' T/ y
  84.         Button1.print("on");
    / l) u$ X4 u* H8 v& X  b4 f
  85.         Button1.color("#0000FF");              //设置app按键是浅蓝色
    8 x( V  R2 s9 O$ _$ G- t
  86.         Button1.text("开启中");5 Z! D4 h# r& g0 C# q
  87.         BlinkerAliGenie.powerState("on");* ~) ]4 D; F3 k  e
  88.         BlinkerAliGenie.print();
    8 X# Z( q! f+ F* n' y  n
  89.     }  T" @' s: w) ?) Y1 h
  90.     else if (state == BLINKER_CMD_OFF)- z. w; \" I) Q  S8 o) q- {
  91.     {
    & x' c% S: V) k+ B0 U. l
  92.         
    # m; s1 J$ o- P! B
  93.         digitalWrite(kg, LOW);8 G- _5 r8 i! [; M2 F
  94.         digitalWrite(de, HIGH);3 f* j2 S' w# @5 r
  95.         Button1.print("off");% X# n6 A2 q- m" k, V$ |  f4 Z
  96.         Button1.color("#00FFFF");              //设置app按键是深蓝色
    2 [4 K/ I3 _: ^' C' r1 E; L* j1 g
  97.         Button1.text("关闭中");% q+ Q; a2 e6 w3 U) S( ~  A
  98.         BlinkerAliGenie.powerState("off");5 Z: L  P5 ^: I  P- q; O; ]3 O
  99.         BlinkerAliGenie.print();* f( {/ x, J; {! X" i; F* n0 \
  100.     }
    ( Y3 ~# g& `1 i2 \9 ]
  101.         ; W$ S! o! Y3 c2 S% V. I9 O
  102. , B+ W5 l) h/ h) j" O) H
  103. }
    1 k! M' B% u5 d' I
  104.   //*******app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态30s~60s一次
    - ?6 e2 ?$ ~6 ~( O5 i6 ]" r
  105. void heartbeat()
    , R( K! `9 Y4 v4 k. U
  106. {
    " v* f5 E" C, f% K$ C
  107.   BLINKER_LOG("状态同步!"); 9 _2 M! }* p- ]
  108.    if (digitalRead(kg)==HIGH) , P) N  X# n  J$ p
  109.     {
    8 ]% v% _+ O0 w
  110.       Button1.print("on");
    6 E) M+ B3 L5 Y) d1 `
  111.       Button1.color("#0000FF");              //设置app按键是浅蓝色
    & X6 K4 X5 R$ X% b+ l! |
  112.       Button1.text("开启中");
    $ v7 |8 V9 v; o& v" H$ m6 }9 g( N  L
  113.     }
    , T6 G% G, z$ ^% l. J/ V. J
  114.     else
    / Q' b) ^0 S( J
  115.     {
    9 I1 P$ X5 |) a% c6 b6 e1 o
  116.       Button1.print("off");- ?- L4 S7 v' i. {, y, X* \1 Q: u
  117.       Button1.color("#00FFFF");              //设置app按键是深蓝色
    ' W; o' E' n" k; e
  118.       Button1.text("关闭中");
    9 J9 W% w9 n/ j- X, k  u, s; H
  119.    
    1 U+ d8 J  W! J4 o
  120.     }
    8 `8 w2 |- V9 Q: Z
  121. }* S9 V+ `. h4 P0 Y; D! ~
  122. //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    2 i! C# s/ g1 U( ^" D; }
  123. void setup()& {+ B/ s- B3 {1 e' Z. ?1 U9 u
  124. {
    ' ^, v2 c* {3 U1 w4 A, {1 ^, p
  125.   // 初始化串口5 F/ V/ r( Q' i1 j; j
  126.   Serial.begin(115200);/ o! x8 h) ?+ `3 k# x1 c& D1 B
  127.   delay(10);
    : o3 k* T. h4 A2 |5 y
  128.   BLINKER_DEBUG.stream(Serial);
    7 J. x! V+ x& Y& G1 h4 n# l2 C
  129.   // 初始化有LED的IO
    * C- [4 R# y5 S3 j7 Q0 T
  130.   pinMode(kg, OUTPUT);                 
      V' w4 f; Y; i, S$ s8 A) t' L! l3 q
  131.   digitalWrite(kg, LOW);//初始化继电器上电状态
    ; `0 {! [8 y% u7 m8 v
  132.   pinMode(de, OUTPUT);
    + q& E" T1 Z8 }. l! e# n
  133.   digitalWrite(de, HIGH);" E- Y* P5 n% t; u
  134.   pinMode(key, INPUT);            
    & i$ g; w1 C5 z# I- z5 z
  135.   Serial.println();& q1 R! q& i- J; m3 n* I$ J$ |
  136.   Serial.print("Connecting to ");" N5 F2 B8 p0 A6 E: E
  137.   Serial.println(ssid);9 \+ o5 Q) f. Y( d' {, L/ n: R  V
  138.   WiFi.begin(ssid, pswd);
    . z' x: v& q0 r2 k) T! ^# b
  139.   while (WiFi.status() != WL_CONNECTED) {
    4 F- k0 n% [( |1 M; ^% U
  140.     delay(500);
    ; C; [. {3 H( v7 y/ _
  141.     Serial.print(".");
    . ~9 e. D( z) ^+ L& A
  142.   }
    3 ]9 `; {: a* |) M( W
  143.   Serial.println("");
    . N* N& Q0 H: Y% ~- @' e$ p
  144.   Serial.println("WiFi connected");7 Z1 c/ f1 S+ |8 u. W9 c
  145.   server.begin();
    # }  b& N) c# E$ p: W9 }2 m
  146.   Serial.println("Server started @ ");8 M; S0 b+ o! z- Q9 }  e
  147.   Serial.println(WiFi.localIP());
    ' B3 s. E6 Q3 U% D9 O' }
  148.   //打印出IP地址,后期可以制作显示器来外部硬件显示ip
    2 m7 {4 ]  o( q5 y( |9 g
  149.   Serial.println("To control GPIO, open your web browser.");
    : B" c" p/ i- Z
  150.   Serial.println("To set GPIO 0 high, type:");
    & p5 t5 W2 `6 L* M4 M) y" y8 O
  151.   Serial.print(WiFi.localIP());4 _; G6 |7 ^9 c+ _& F
  152.   Serial.println("/gpio/1");" n; U) W) |" g+ y' Q1 i5 L3 h( T
  153.   Serial.println("To set GPIO 0 low, type:");
    4 W6 x5 n5 x* L2 v: A! V
  154.   Serial.print(WiFi.localIP());
    2 L& C  ^2 d/ Y6 p& \+ u- V; h
  155.   Serial.println("/gpio/0");& o, h! Q  I% f. o
  156.   Serial.println("To toggle GPIO 0, type:");! E7 r4 S- @5 v( L
  157.   Serial.print(WiFi.localIP());+ y  Z& y6 ], {9 F2 J  h2 y
  158.   Serial.println("/gpio/4");# B# [, v: e7 w) V5 l: v! U

  159.   A: ]: m0 X" N* s6 k5 E
  160.   // 初始化blinker, }% q, t6 X6 w9 t0 Z, ]5 A
  161.   Blinker.begin(auth, ssid, pswd);+ v, \$ e$ ^; K
  162.   BlinkerMIOT.attachPowerState(miotPowerState);              //小爱语音操作注册函数
      O* ^4 j7 Q/ M( v( ~# P) B  t: s
  163.   BlinkerAliGenie.attachPowerState(aligeniePowerState);      //天猫语音操作注册函数+ F; q" t: S6 M
  164.   Blinker.attachHeartbeat(heartbeat);              //app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态进行语音操作和app操作同步。
    ' R4 p; `/ f: k$ H9 |
  165. : N- S2 }5 M9 @& z$ E7 F2 ]
  166.   Button1.attach(button1_callback);             //app上操作必须的注册回调函数关联按键名“Button1”和判断程序“button1_callback
    % N* [+ a$ r: C' J* |* a
  167. }# d: h$ l8 t1 r
  168. void dataRead(const String & data)$ V8 y7 ?2 m  s0 A, b: m4 `% D
  169. {! M: [) v5 K/ @3 g; c' C  s6 H( u! s
  170.     BLINKER_LOG("Blinker readString: ", data);3 F& _) K$ Z' _, [& o
  171. 7 }- l5 u% u/ p8 G
  172.     Blinker.vibrate();8 Z; @# g# Y/ y; c( X: n8 Z
  173.    
    " X6 t7 a( H8 ]4 k2 R* c1 i0 V
  174.     uint32_t BlinkerTime = millis();
    : l2 `( S$ I- [1 m& e$ Z+ ~
  175.    
    1 J( h, J# n5 \/ \( g
  176.     Blinker.print("millis", BlinkerTime);
    + S# V* {" H- C% ~$ E
  177. }
    1 p, L/ H+ R5 j% P+ C" x2 \- p
  178. void loop()* c3 c' I# E$ I$ U& s5 g6 q" ]; q
  179. {
    9 q8 K0 F8 B6 E6 U
  180.   Blinker.run();2 P* H+ E! n! a  D( o; f5 \8 }
  181.   if (digitalRead(key)==LOW)" N3 H& D- ?! n, |+ @- k
  182.   {5 v9 K2 {3 p5 M1 `9 y
  183.     Blinker.delay(200);
    / H2 i- }. {* X. Z/ ?! G) r
  184.     if (digitalRead(key)==LOW)1 M/ D, r6 u- N8 Y# x( A" u- B
  185.     {
    0 [/ B, _3 Z( j+ ^$ V9 W2 \! V
  186.           if (digitalRead(kg)==LOW)
    " j( K* N% P( n3 D" q$ O
  187.        {0 e3 ~# V- l) e) Y  D# [5 w
  188.             7 P0 c5 x) s2 W* i. d
  189.             digitalWrite(kg, HIGH);$ P# E# n! k) a( Q: \# T8 a
  190.             digitalWrite(de, LOW);3 D8 ?8 M  \/ Q5 t+ u
  191.             Button1.print("on");
    9 W' y$ s( k. y, P, _
  192.             Button1.color("#0000FF");              //设置app按键是浅蓝色1 X% ]3 a: |% ~6 t# \6 k, K- z. D
  193.             Button1.text("开启中");
    1 P$ D) H9 J% A
  194.        }
    : H0 B% x3 w" ]
  195.        else if (digitalRead(kg)==HIGH)# J% |: O0 B! w/ [# f" a$ L
  196.        {
    ; \6 y( @; I1 v- u. U: ^; U
  197.             digitalWrite(kg, LOW);
    : Z3 q$ [8 b8 S: a, g9 q! G# d" o
  198.             digitalWrite(de, HIGH);
    9 \5 d0 R! G( V3 n
  199.             Button1.print("off");
    . w8 D0 {/ H- O
  200.             Button1.color("#00FFFF");              //设置app按键是深蓝色* c/ u/ b2 h* q& L9 G
  201.             Button1.text("关闭中");3 {; c* K9 r" f! ~% f. V
  202.        }
    ; m! y6 |$ s, Y( z
  203.       }
    $ p& F# n( ~* R
  204.     }' l3 ?' S# C) d& G
  205. }
复制代码
- r. L  d+ k% T1 i6 ]. |3 O4 A

/ c1 ~1 y4 z) U0 ]  m' C+ E# E我没有用卖家给的码,我自己写了一个,参考我前面的文章最简单的8266天猫精灵控制开关,点灯、Mixly可视模块化编程 https://bbs.nasdiyer.com/thread-18755-1-1.html
0 ]1 Q" i7 P; A# I/ o/ F+ U% z; B5 `8 Y$ T% a: m" Y  m( C1 q5 j
把上面的2改成5,把高低电平对调一下就可以使用天猫精灵来控制你的这个插座了。我是把我的第一个插座放在了我的落地电风扇中了,当我慵懒的在沙发上刷着手机时候感觉有一点点热,我只要呼唤“天猫精灵,打开风扇”,就可以了。" e& Z# s8 j( ?! M) b, E3 I

  V8 u$ M, _$ ?$ L
6 P  c# w) t7 o  i: c' ?- P. f

0

主题

18

回帖

85

积分

初级渣柚V2

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

2

主题

11

回帖

56

积分

初级渣柚V2

积分
56
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$ |' p; U) H3 a1 f/ _
买了几个   做工挺扎实的,但是外壳怎么拆啊  拿斜口钳拨了一个,   四个圆角的卡口根本没法正常拆 ...

7 Y7 h/ B* A. ~! U0 g2 b: e% _+ h' y) ^大力出奇迹呀

1

主题

8

回帖

256

积分

中级渣柚V1

积分
256
发表于 2021-8-29 08:14:58 | 显示全部楼层
a467913252 发表于 2021-8-24 15:53
2 M) X; Y( \7 M. T0 J买了几个   做工挺扎实的,但是外壳怎么拆啊  拿斜口钳拨了一个,   四个圆角的卡口根本没法正常拆 ...
$ s' Q& h& Z( k( y
昨晚拆了一个,废了老大劲,想和卖家说的无损拆下来,不拆个三五个积攒经验,基本不可能

2

主题

11

回帖

56

积分

初级渣柚V2

积分
56
QQ
发表于 2021-9-4 23:05:22 | 显示全部楼层
sevenup0719 发表于 2021-8-29 08:14
/ e( a# E: P; V0 @, r昨晚拆了一个,废了老大劲,想和卖家说的无损拆下来,不拆个三五个积攒经验,基本不可能 ...

( G; m% |" ?4 R- Q& b你的搞定没  为什么我的根本没法烧录   连接不上,,用esp01s还没问题的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-3-29 16:55 , Processed in 0.057470 second(s), 4 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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