一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 487|回复: 3
收起左侧

[51单片机] C51解析天猫精灵队友的协议用于改装语音控制开关

[复制链接]
发表于 2024-11-5 17:33 | 显示全部楼层 |阅读模式
事情是这样的,某鱼淘了一些一两块钱的天猫精灵队友香薰机主板, C51解析天猫精灵队友的协议用于改装语音控制开关-1.gif
可以用天猫精灵控制,但是只能喷雾用,喷雾呢,又是间歇的,间隔几分钟喷一次。
想用他这个喷雾信号来改装排插开关是不可能了。 小白_SCH.pdf (151.88 KB, 下载次数: 4)
于是用电脑抓了一下他的串口协议
发现每次开关都会先发一串FF 00 00 06 82 开头的指令
研究了一下发现是有规律的
当FF 00 00 06 82 02 xx=00的时候是关机, 当xx=01的时候是开机。

知道了这个就好办了,找个51单片机挂在串口这里,解析他的指令就可以 了。
当我收到FF 00 00 06 82 02 01时候,就把排插电源接通。
当我收到FF 00 00 06 82 02 00时候,就把排插电源断开。

这样我就可以通过天猫精灵的自定义场景功能来实现语音开关插座了。
在天猫精灵APP里面自定义场景,
当我对天猫精灵说:打开插座时,打开香薰电源;
当我对天猫精灵说:关闭插座时,关闭香薰电源;

这样就可以制作丐版的智能排查了,当然也可以通过香薰机的预约功能进行预约排查开启时间。

33e02aa201588caab509f52c60a404e7.png 111.png




 楼主| 发表于 2024-11-5 17:34 | 显示全部楼层
代码写的比较水,凑合能用,见笑了 N79E8132天猫精灵解析开关执行UART.zip (69.98 KB, 下载次数: 5)
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2014 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. //***********************************************************************************************************
  7. //  Nuvoton Technology Corp.
  8. //  Date: 23/Jan/2014
  9. //  E-Mail: MicroC-8bit@nuvoton.com
  10. //***********************************************************************************************************
  11. //  Application : UART Function
  12. //  RXD => P1.1 ; TXD => P1.0 (default)
  13. //
  14. //  Output : UART receive a byte and transmit the same byte to PC
  15. //***********************************************************************************************************

  16. //------------------------- <<< Use Configuration Wizard in Context Menu >>> --------------------------------
  17. // <h> UART pin Select
  18. //     <o0.6> UART pin
  19. //          <0=> Select P1.0, P1.1 as UART pin(default)
  20. //          <1=> Select P2.6, P2.7 as UART pin(28 pin only)
  21. // </h>
  22. //-------------------------------- <<< end of configuration section >>> -------------------------------------

  23. #define Uart_Port_Sel   0x00
  24. #include <stdio.h>
  25. #include "N79E81x.h"
  26. #include "Typedef.h"
  27. #include "Define.h"
  28. #include "Common.h"
  29. #include "Delay.h"
  30. #include "Version.h"

  31. UINT8 u8Uart_Data;

  32. u8 RxBuf[16];
  33. u8 TxBuf[16];
  34. u8 StuNum[] = "201918060210";
  35. bit bRxFlag = 0;
  36. u8 RxLth = 0;
  37. u8 TxLth = 0;
  38. u8 Rxcounter = 0;
  39. u8 Txcounter = 0;
  40. u8 RxStus = 0;
  41. u8 RxFunc = 0;


  42. void Delay_ms(u16 ms)
  43. {
  44.         unsigned char i, j;

  45.         while(ms--)
  46.         {
  47.                 ;;//_nop_();
  48.                 i = 2;
  49.                 j = 199;
  50.                 do
  51.                 {
  52.                         while (--j);
  53.                 } while (--i);
  54.         }
  55. }

  56. //-----------------------------------------------------------------------------------------------------------
  57. void main (void)
  58. {
  59.     AUXR1 |= Uart_Port_Sel;             // Select P10/P11 as UART pin(default)
  60.     InitialUART0_Timer1(9600);          // 9600 Baud Rate @ 11.0592MHz
  61.        
  62.                 TxBuf[0] = 0x4a;                //前导    0x4a  
  63.                 TxBuf[1] = 0x43;                //前导    0x43
  64.                 TxBuf[2] = 0x0a;                //地址    0x0a        学号:10
  65.                 TxBuf[3] = 0x01;                //功能号  1
  66.                 TxBuf[4] = 0x01;                //长度    1
  67.        
  68.     Show_Version_Number_To_PC();
  69.     printf ("\n*===================================================================");
  70.     printf ("\n*  Name: N79E84x Series UART Sample Code.");
  71.     printf ("\n*===================================================================");
  72.     printf ("\n UART receive a byte and transmit the same byte to PC.\n");
  73.     ES = 1;                             // Enable serial interrupt
  74.     EA = 1;                             // Enable global interrupt

  75.     while(1);                          // Endless

  76. }

  77. //开
  78. //FF 00 00 06 82 02 01 CE 41 00 9A
  79. //关
  80. //FF 00 00 06 82 02 00 CF 41 00 9A

  81. void UART_ISR(void) interrupt 4
  82. {
  83.         u8 tmp;
  84.         static u8 sum = 0;
  85.         if(RI){
  86.                 RI = 0;
  87.                 tmp = SBUF;
  88.                 switch(RxStus){
  89.                         case 0 :        //前导
  90.                                 if(tmp == 0xFF)
  91.                                         RxStus = 1;
  92.                                 break;
  93.                         case 1 :        //前导
  94.                                 if(tmp == 0x0)
  95.                                         RxStus = 2;
  96.                                 break;
  97.                         case 2 :        //地址
  98.                                 if(tmp == 0x0){       
  99.                                         RxStus = 3;
  100.                                         sum = tmp;
  101.                                 }
  102.                                 break;
  103.                         case 3 :        //功能号
  104.                                 if(tmp == 0x06){
  105.                                         RxStus = 4;
  106.                                         sum = tmp;
  107.                                 }
  108.                                 break;
  109.                         case 4 :        //长度
  110.                                 if(tmp == 0x82){       
  111.                                         RxStus = 5;
  112.                                         sum = tmp;
  113.                                 }
  114.                                 break;
  115.                         case 5 :        //数据
  116.                                 if(tmp == 0x02){
  117.                                         RxStus = 6;
  118.                                         sum = tmp;
  119.                                 }
  120.                                 break;
  121.                         case 6 :        //校验
  122.                                 if(tmp == 0x01)        P02=0;                       
  123.                                 else if(tmp == 0x00)P02=1;
  124.                                
  125.                                 RxStus = 7;
  126.                                 sum = tmp;
  127.                                
  128.                                 break;
  129.                                
  130.                                
  131.                         default :
  132.                                 RxStus = 0;
  133.                                 Rxcounter = 0;
  134.                                 break;
  135.                 }
  136.         }
  137.        
  138.        
  139.         if(TI){
  140.                 TI = 0;
  141.                 if(Txcounter < TxLth){
  142.                         SBUF = TxBuf[Txcounter++];
  143.                 }
  144.                 else{
  145.                         Txcounter = 0;
  146.                         TxLth = 0;
  147.                 }
  148.         }
  149. }
复制代码


发表于 2024-11-7 22:18 | 显示全部楼层
玩得爽,支持。能改声纹数据匹配开灯就好了
发表于 2024-11-20 11:45 | 显示全部楼层
天猫精灵APP里不能更改设备名称吗?

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-12-12 03:02 , Processed in 0.051765 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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