找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 951|回复: 2
收起左侧

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

[复制链接]
ID:512651 发表于 2024-11-5 17:28 | 显示全部楼层 |阅读模式
事情是这样的,某鱼淘了一些一两块钱的天猫精灵队友香薰机主板,
可以用天猫精灵控制,但是只能喷雾用,喷雾呢,又是间歇的,间隔几分钟喷一次。
想用他这个喷雾信号来改装排插开关是不可能了。
于是用电脑抓了一下他的串口协议
发现每次开关都会先发一串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

小白_SCH.pdf

151.88 KB, 下载次数: 5, 下载积分: 黑币 -5

评分

参与人数 1黑币 +80 收起 理由
admin + 80 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:512651 发表于 2024-11-5 17:30 | 显示全部楼层
代码写的比较烂,凑合也能用,见笑了 N79E8132天猫精灵解析开关执行UART.zip (69.98 KB, 下载次数: 4)
  1. #define Uart_Port_Sel   0x00
  2. #include <stdio.h>
  3. #include "N79E81x.h"
  4. #include "Typedef.h"
  5. #include "Define.h"
  6. #include "Common.h"
  7. #include "Delay.h"
  8. #include "Version.h"

  9. UINT8 u8Uart_Data;

  10. u8 RxBuf[16];
  11. u8 TxBuf[16];
  12. u8 StuNum[] = "201918060210";
  13. bit bRxFlag = 0;
  14. u8 RxLth = 0;
  15. u8 TxLth = 0;
  16. u8 Rxcounter = 0;
  17. u8 Txcounter = 0;
  18. u8 RxStus = 0;
  19. u8 RxFunc = 0;


  20. void Delay_ms(u16 ms)
  21. {
  22.         unsigned char i, j;

  23.         while(ms--)
  24.         {
  25.                 ;;//_nop_();
  26.                 i = 2;
  27.                 j = 199;
  28.                 do
  29.                 {
  30.                         while (--j);
  31.                 } while (--i);
  32.         }
  33. }

  34. //-----------------------------------------------------------------------------------------------------------
  35. void main (void)
  36. {
  37.     AUXR1 |= Uart_Port_Sel;             // Select P10/P11 as UART pin(default)
  38.     InitialUART0_Timer1(9600);          // 9600 Baud Rate @ 11.0592MHz
  39.        
  40.                 TxBuf[0] = 0x4a;                //前导    0x4a  
  41.                 TxBuf[1] = 0x43;                //前导    0x43
  42.                 TxBuf[2] = 0x0a;                //地址    0x0a        学号:10
  43.                 TxBuf[3] = 0x01;                //功能号  1
  44.                 TxBuf[4] = 0x01;                //长度    1
  45.        
  46.     Show_Version_Number_To_PC();
  47.     printf ("\n*===================================================================");
  48.     printf ("\n*  Name: N79E84x Series UART Sample Code.");
  49.     printf ("\n*===================================================================");
  50.     printf ("\n UART receive a byte and transmit the same byte to PC.\n");
  51.     ES = 1;                             // Enable serial interrupt
  52.     EA = 1;                             // Enable global interrupt

  53.     while(1);                          // Endless

  54. }

  55. //开
  56. //FF 00 00 06 82 02 01 CE 41 00 9A
  57. //关
  58. //FF 00 00 06 82 02 00 CF 41 00 9A

  59. void UART_ISR(void) interrupt 4
  60. {
  61.         u8 tmp;
  62.         static u8 sum = 0;
  63.         if(RI){
  64.                 RI = 0;
  65.                 tmp = SBUF;
  66.                 switch(RxStus){
  67.                         case 0 :        //前导
  68.                                 if(tmp == 0xFF)
  69.                                         RxStus = 1;
  70.                                 break;
  71.                         case 1 :        //前导
  72.                                 if(tmp == 0x0)
  73.                                         RxStus = 2;
  74.                                 break;
  75.                         case 2 :        //地址
  76.                                 if(tmp == 0x0){       
  77.                                         RxStus = 3;
  78.                                         sum = tmp;
  79.                                 }
  80.                                 break;
  81.                         case 3 :        //功能号
  82.                                 if(tmp == 0x06){
  83.                                         RxStus = 4;
  84.                                         sum = tmp;
  85.                                 }
  86.                                 break;
  87.                         case 4 :        //长度
  88.                                 if(tmp == 0x82){       
  89.                                         RxStus = 5;
  90.                                         sum = tmp;
  91.                                 }
  92.                                 break;
  93.                         case 5 :        //数据
  94.                                 if(tmp == 0x02){
  95.                                         RxStus = 6;
  96.                                         sum = tmp;
  97.                                 }
  98.                                 break;
  99.                         case 6 :        //校验
  100.                                 if(tmp == 0x01)        P02=0;                       
  101.                                 else if(tmp == 0x00)P02=1;
  102.                                
  103.                                 RxStus = 7;
  104.                                 sum = tmp;
  105.                                
  106.                                 break;
  107.                                
  108.                                
  109.                         default :
  110.                                 RxStus = 0;
  111.                                 Rxcounter = 0;
  112.                                 break;
  113.                 }
  114.         }
  115.        
  116.        
  117.         if(TI){
  118.                 TI = 0;
  119.                 if(Txcounter < TxLth){
  120.                         SBUF = TxBuf[Txcounter++];
  121.                 }
  122.                 else{
  123.                         Txcounter = 0;
  124.                         TxLth = 0;
  125.                 }
  126.         }
  127. }
复制代码




回复

使用道具 举报

ID:433219 发表于 2024-11-6 10:05 | 显示全部楼层
  分析协议,找出规律,,,好玩的DIY
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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