首頁 收藏 QQ群
 網(wǎng)站導航

ZNDS智能電視網(wǎng) 推薦當貝市場

TV應用下載 / 資源分享區(qū)

軟件下載 | 游戲 | 討論 | 電視計算器

綜合交流 / 評測 / 活動區(qū)

交流區(qū) | 測硬件 | 網(wǎng)站活動 | Z幣中心

新手入門 / 進階 / 社區(qū)互助

新手 | 你問我答 | 免費刷機救磚 | ROM固件

查看: 275672|回復: 4
上一主題 下一主題
[分享]

極米new Z6X接入米家教程 實現(xiàn)小愛控制藍牙開機及Wifi關(guān)機

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2024-1-10 17:12 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式 | 來自云南
如何將極米new Z6X接入米家,實現(xiàn)小愛控制藍牙開機及Wifi關(guān)機等功能是一個不小的挑戰(zhàn)。本文將為你提供詳細的教程,幫助你輕松實現(xiàn)極米new Z6X與米家的完美結(jié)合。

參考前人的經(jīng)驗,使用ESP32開發(fā)板,寫了個程序,實現(xiàn)了極米new Z6X投影儀接入米家,小愛控制的功能。

主要實現(xiàn)的有:
1、Wifi接入巴法,實現(xiàn)米家控制;
2、藍牙廣播特定manufacturer data實現(xiàn)完美藍牙開機;
3、Wifi  UDP廣播實現(xiàn)復雜指令的完美快速關(guān)機。

======================分割線=====================

2024.1.7更新

先說一下思路:先研究極米藍牙遙控器開機時發(fā)射的藍牙廣播特點,再測試wifi udp廣播的指令關(guān)機,沒問題后使用ESP32的藍牙和wifi模塊分別模擬遙控器和手機app的關(guān)機指令。最后把這個開關(guān)功能接入巴法實現(xiàn)完美小愛同學開關(guān)機

一、先說開機,這個方案是用ESP32發(fā)送一個藍牙廣播,模擬原機遙控器實現(xiàn)的開機功能,所以不用考慮接智能開關(guān)的方案了。
使用的ESP32如圖:

極米new Z6X接入米家教程 實現(xiàn)小愛控制藍牙開機及Wifi關(guān)機

極米的藍牙遙控測試:

1. 需要一個蘋果的ios設(shè)備,在App Store下載 bluetooth smart scanner app,安卓上好像nRF Connect也可以實現(xiàn)類似功能,github上能下載到。
2. 將你的投影儀主機徹底斷開電源。
3. 不停的按遙控器上的開機按鍵,這時在bluetooth smart scanner app上應該可以找到遙控器發(fā)射的ble advertisement信號,我的會出現(xiàn)名稱為Bluetooth 4.0 RC的設(shè)備
4. 在上面的信號中,找到manufactorer data,我的遙控器在按下開關(guān)鍵時會快速閃動顯示如圖的字符<46004617 03efb224 40ffffff 3043524b 544d>
    這個manufactorer data是模擬藍牙遙控的關(guān)鍵。有的設(shè)備可以在網(wǎng)上查到,ios - How can I clone a non-paired BLE signal from a remote to trigger a device? - Stack Overflow  ,但最好還是自己測一下。

極米new Z6X接入米家教程 實現(xiàn)小愛控制藍牙開機及Wifi關(guān)機

5. 建議先通過EFR connect. 這個安卓app, 驗證下能否使用上面的manufactorer data喚起投影儀。

極米new Z6X接入米家教程 實現(xiàn)小愛控制藍牙開機及Wifi關(guān)機

如果能成功使用上面圖中的Manufacturer data填寫方法成功打開投影儀,這步就成功了。

======================分割線=====================

二、Wifi關(guān)機功能

這部分我是直接沿用前面幾位大佬的研究直接拿來用,總結(jié)一下:

極米有2套api可用,一套是復雜指令,一套是簡單的按鍵輸入,所有指令均是通過upd連接到目標機器上。
復雜api
端口:16750
指令內(nèi)容如以下格式:
  1. {"action":20000,"controlCmd":{"delayTime":0,"mode":6,"time":0,"type":0},"msgid":"2"}
復制代碼

可以實現(xiàn)快速關(guān)機,不用等15秒。

簡單按鍵api
端口:16735
格式如下:
  1. KEYPRESSES:116
復制代碼

下面這是測試的一些功能:
VR">
  1. "power" => 'KEYPRESSES:116',
  2. "vol+" => "KEYPRESSES:115",
  3. "vol-" => "KEYPRESSES:114",
  4. "menu" => "KEYPRESSES:139",
  5. "back" => "KEYPRESSES:48",
  6. "pause" => "KEYPRESSES:49",
  7. "paly" => "KEYPRESSES:49",
  8. "down" => "KEYPRESSES:38",
  9. "up" => "KEYPRESSES:36",
  10. "left" => "KEYPRESSES:50",
  11. "right" => "KEYPRESSES:37",
  12. "home" => "KEYPRESSES:35",
復制代碼

我用的是復雜指令,可以實現(xiàn)快速關(guān)機。測試很簡單,找一個通訊測試助手一類的軟件,電腦和投影儀在一個局域網(wǎng)內(nèi),用UDP Client填寫投影儀的IP地址及端口號,然后發(fā)送復雜或者簡單指令,就能實現(xiàn)控制。測試可用的話這步也就成功了

======================分割線=====================

三、ESP32開發(fā)板編程

我使用的是Arduino,先貼一下主程序代碼,基本都注釋了,如果有問題發(fā)帖吧

  1. #include <WiFi.h>               //默認,加載WIFI頭文件
  2. #include "PubSubClient.h"       //默認,加載MQTT庫文件
  3. #include <WiFiUdp.h>            //引用以使用UDP
  4. #include "ESP32BLEAdvertise.h"  //引用藍牙廣播頭文件

  5. //********************需要修改的部分*******************//
  6. const char* ssid = "XXXX";           //修改,你的路由去WIFI名字
  7. const char* password = "XXXXXXXX";     //你的WIFI密碼
  8. #define ID_MQTT  "XXXXXXXXXXXXXX"     //用戶私鑰,控制臺獲取
  9. const char* topic = "XXXXXXXXXXXX";        //主題名字,可在巴法云控制臺自行創(chuàng)建,名稱隨意
  10. const int B_led = 2;       //單片機LED引腳值,D系列是NodeMcu引腳命名方式,其他esp8266型號將D2改為自己的引腳
  11. bool Turned = false;;
  12. //**************************************************//

  13. const char* mqtt_server = "bemfa.com";  //默認,MQTT服務器
  14. const int mqtt_server_port = 9501;      //默認,MQTT服務器
  15. WiFiClient espClient;
  16. PubSubClient client(espClient);
  17. SimpleBLE bleadv;

  18. //燈光函數(shù)及引腳定義
  19. void turnOn();
  20. void turnOff();

  21. //********************UDP按鍵信息關(guān)機*****************//
  22. WiFiUDP Udp;
  23. IPAddress remote_IP(192, 168, 3, 27);// 自定義遠程監(jiān) IP 地址
  24. unsigned int remoteUdpPort = 16735;  // 簡單指令端口
  25. unsigned int remoteUdpPortFZ = 16750;  // 復雜令端口
  26. const char* Keyword = "KEYPRESSES:116"; //簡單指令:關(guān)機
  27. const char* KeywordFZ = {"{"action":20000,"controlCmd":{"delayTime":0,"mode":6,"time":0,"type":0},"msgid":"2"}"}; //復雜指令:快速關(guān)機
  28. //**************************************************//

  29. void setup_wifi() {
  30.   delay(10);
  31.   Serial.println();
  32.   Serial.print("Connecting to ");
  33.   Serial.println(ssid);
  34.   WiFi.begin(ssid, password);
  35.   while (WiFi.status() != WL_CONNECTED) {
  36.     delay(500);
  37.     Serial.print(".");
  38.   }

  39.   Serial.println("");
  40.   Serial.println("WiFi connected");
  41.   Serial.println("IP address: ");
  42.   Serial.println(WiFi.localIP());

  43. }

  44. void callback(char* topic, byte* payload, unsigned int length) {
  45.   Serial.print("Topic:");
  46.   Serial.println(topic);
  47.   String msg = "";
  48.   for (int i = 0; i < length; i++) {
  49.     msg += (char)payload[i];
  50.   }
  51.   Serial.print("Msg:");
  52.   Serial.println(msg);
  53.   if (msg == "on") {//如果接收字符on,亮燈并打開投影
  54.     turnOn();//開啟函數(shù)
  55.     Turned = true;
  56.   } else if (msg == "off") {//如果接收字符off,關(guān)燈并關(guān)閉投影
  57.     turnOff();//關(guān)閉函數(shù)
  58.     Turned = false;
  59.   }
  60.   msg = "";
  61. }

  62. void reconnect() {
  63.   // Loop until we're reconnected
  64.   while (!client.connected()) {
  65.     Serial.print("Attempting MQTT connection...");
  66.     // Attempt to connect
  67.     if (client.connect(ID_MQTT)) {
  68.       Serial.println("connected");
  69.       Serial.print("subscribe:");
  70.       Serial.println(topic);
  71.       //訂閱主題,如果需要訂閱多個主題,可發(fā)送多條訂閱指令client.subscribe(topic2);client.subscribe(topic3);
  72.       client.subscribe(topic);
  73.     } else {
  74.       Serial.print("failed, rc=");
  75.       Serial.print(client.state());
  76.       Serial.println(" try again in 5 seconds");
  77.       // Wait 5 seconds before retrying
  78.       delay(5000);
  79.     }
  80.   }
  81. }

  82. void setup() {
  83.   pinMode(B_led, OUTPUT); //設(shè)置引腳為輸出模式
  84.   digitalWrite(B_led, LOW);//默認引腳上電高電平
  85.   Serial.begin(115200);     //設(shè)置波特率115200
  86.   setup_wifi();           //設(shè)置wifi的函數(shù),連接wifi
  87.   client.setServer(mqtt_server, mqtt_server_port);//設(shè)置mqtt服務器
  88.   client.setCallback(callback); //mqtt消息處理
  89. }

  90. void loop() {
  91.   int i = 1;
  92.   if (!client.connected()) {
  93.     reconnect();
  94.   }
  95.   else
  96.   {
  97.     if (Turned)
  98.     {
  99.       bleadv.begin();//初始化藍牙名
  100.       uint8_t data[] = {0x46, 0x00, 0x46, 0x17, 0x03, 0xef, 0xb2, 0x24, 0x40, 0xff, 0xff, 0xff, 0x30, 0x43, 0x52, 0x4b, 0x54, 0x4d}; //藍牙廣播內(nèi)容
  101.       bleadv.advertise(data, 18);
  102.       delay(5000);
  103.     }
  104.     else
  105.     {
  106.       bleadv.end();
  107.     }
  108.   }
  109.   client.loop();
  110. }

  111. //打開投影
  112. void turnOn() {
  113.   digitalWrite(B_led, HIGH);
  114. }

  115. //關(guān)閉投影
  116. void turnOff() {
  117.   digitalWrite(B_led, LOW);
  118.   Udp.beginPacket(remote_IP, remoteUdpPortFZ);//配置遠端ip地址和端口
  119.   String str_cnt(KeywordFZ);
  120.   Udp.print(str_cnt);//把數(shù)據(jù)寫入發(fā)送緩沖區(qū)
  121.   Udp.endPacket();//發(fā)送數(shù)據(jù)
  122. }
復制代碼

好了,到此就可以接入巴法控制了。怎么加入米家就不用說了吧~



相關(guān)閱讀:
怎樣用小愛音箱控制電視 用小愛音箱控制電視播放任意影視

上一篇:一文看懂極米RS10mini對比堅果N1有什么區(qū)別
下一篇:一文看懂極米RS10mini對比極米Z7X之間有哪些區(qū)別
沙發(fā)
發(fā)表于 2024-1-10 17:52 | 只看該作者 | 來自廣東
同價位個人比較偏向于更為簡潔靈活的當貝D5X投影儀,畢竟當貝是以軟件起家,在這方面的優(yōu)勢還是不容小覷的
回復 支持 反對

使用道具 舉報

板凳
發(fā)表于 2024-3-5 23:27 | 只看該作者 | 來自黑龍江
jimi1:4:10: fatal error: ESP32BLEAdvertise.h: No such file or directory,樓主在哪里下載的這個庫呢

回復 支持 反對

使用道具 舉報

地板
發(fā)表于 2024-3-5 23:47 | 只看該作者 | 來自黑龍江
hao176 發(fā)表于 2024-3-5 23:27
jimi1:4:10: fatal error: ESP32BLEAdvertise.h: No such file or directory,樓主在哪里下載的這個庫呢

...

@投影郵遞員
回復 支持 反對

使用道具 舉報

5#
發(fā)表于 2024-3-24 10:30 | 只看該作者 | 來自福建
這個沒有程序員基礎(chǔ)沒人會搞,算了。。。太難了,看著頭暈
回復 支持 反對

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

Archiver|新帖|標簽|軟件|Sitemap|ZNDS智能電視網(wǎng) ( 蘇ICP備2023012627號 )

網(wǎng)絡信息服務信用承諾書 | 增值電信業(yè)務經(jīng)營許可證:蘇B2-20221768 丨 蘇公網(wǎng)安備 32011402011373號

GMT+8, 2024-12-22 16:36 , Processed in 0.067974 second(s), 15 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報:report#znds.com (請將#替換為@)

© 2007-2024 ZNDS.Com

快速回復 返回頂部 返回列表