数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 1135|回复: 4

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

[复制链接]
发表于 2024-11-5 15:01:55 | 显示全部楼层 |阅读模式
事情是这样的,某鱼淘了一些一两块钱的天猫精灵队友香薰机主板,电路图:
可以用天猫精灵控制,但是只能喷雾用,喷雾呢,又是间歇的,间隔几分钟喷一次。
想用他这个喷雾信号来改装排插开关是不可能了。
于是用电脑抓了一下他的串口协议
发现每次开关都会先发一串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里面自定义场景,
当我对天猫精灵说:打开插座时,打开香薰电源;
当我对天猫精灵说:关闭插座时,关闭香薰电源;

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




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 3家元 +135 收起 理由
cxw0102 + 30 優秀文章
vip2128 + 15
家睦 + 90

查看全部打赏

 楼主| 发表于 2024-11-5 15:06:56 | 显示全部楼层
本帖最后由 gw168sh 于 2024-11-5 18:28 编辑
  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 [url=home.php?mod=space&uid=3057940]@[/url] 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-5 16:07:28 | 显示全部楼层
不知道怎么2楼代码一直出不来。可能是我不会用,时间长不发帖子了

把C51的工程发上来把:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

发表于 2024-11-5 16:50:39 | 显示全部楼层
重新刷进去对应精灵固件是不是就可以实现更多功能了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-5 17:25:27 | 显示全部楼层
jpdd521 发表于 2024-11-5 16:50
重新刷进去对应精灵固件是不是就可以实现更多功能了。

可以重新刷的,我也找到固件了,可以共用安信可的固件。
奇怪我发的帖子一直出不来。
回复 支持 反对

使用道具 举报

发表于 2024-11-6 08:24:22 | 显示全部楼层
进来学习一下
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-8-5 14:46 , Processed in 0.124800 second(s), 13 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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