RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

用M61系列模塊做一個(gè)手機(jī)藍(lán)牙自拍桿?

AIoT行業(yè)洞察 ? 來源:AIoT行業(yè)洞察 ? 作者:AIoT行業(yè)洞察 ? 2024-10-25 13:49 ? 次閱讀

以下作品由安信可社區(qū)用戶

lazy制作

閑話

開始其實(shí)想做藍(lán)牙鍵盤的,后來順便把自拍桿功能也實(shí)現(xiàn)了。

雖然市面上有很多這樣的產(chǎn)品,但是作為 DIY 愛好者的快樂不就是折騰嗎。折騰使我快樂。

比如,剛到手的 AiPi-KVM 被我用 12V 點(diǎn)亮的故事

【我和小安派】故(shi)事(gu)AiPi-KVM 短暫的一生后續(xù)

后來買了一堆零件,還想著用烙鐵焊上結(jié)果焊盤都干掉了。

HID簡(jiǎn)介

The Human Interface Device (HID) ,即人機(jī)交互設(shè)備。定義了藍(lán)牙在人機(jī)接口設(shè)備中的協(xié)議、特征和使用規(guī)程。典型的應(yīng)用包括藍(lán)牙鼠標(biāo)、藍(lán)牙鍵盤、藍(lán)牙游戲手柄等。該協(xié)議改編自 USB HID Protocol。

手機(jī)藍(lán)牙的 HID 是指人機(jī)接口設(shè)備。

HID 是藍(lán)牙技術(shù)中的一種協(xié)議,用于描述設(shè)備與人之間的交互接口。下面是詳細(xì)的解釋:

HID 基本含義:HID 是英文“Human Interface Devices”的縮寫,中文可以翻譯為“人機(jī)接口設(shè)備”。在藍(lán)牙技術(shù)中,HID 被廣泛應(yīng)用在各種設(shè)備之間,尤其是手機(jī)與外設(shè)之間。比如,我們常常用手機(jī)的藍(lán)牙連接鼠標(biāo)、鍵盤等外部設(shè)備,這時(shí)就會(huì)用到 HID 協(xié)議。

工作原理:當(dāng)手機(jī)通過藍(lán)牙與另一個(gè)設(shè)備建立連接時(shí),如果另一設(shè)備支持 HID 協(xié)議,那么手機(jī)就可以識(shí)別并與之通信。這種通信允許用戶通過這些外設(shè)設(shè)備進(jìn)行更直觀、便捷的操作。比如,使用藍(lán)牙連接的鍵盤輸入文字,或者使用鼠標(biāo)移動(dòng)屏幕上的光標(biāo)。

手機(jī)中的應(yīng)用場(chǎng)景:在日常生活中,手機(jī)藍(lán)牙的 HID 功能經(jīng)常被用于連接各種外部設(shè)備,如耳機(jī)、音箱、游戲手柄等。這使得手機(jī)的功能得到了擴(kuò)展,提高了用戶的使用體驗(yàn)。通過 HID 協(xié)議,這些設(shè)備可以與手機(jī)快速建立連接,并進(jìn)行數(shù)據(jù)傳輸和控制。

總的來說,手機(jī)藍(lán)牙的 HID 是指人機(jī)接口設(shè)備協(xié)議,它使得手機(jī)能夠識(shí)別并與各種外部設(shè)備進(jìn)行通信,提高了用戶的使用體驗(yàn)和便捷性。

詳細(xì)學(xué)習(xí)參考可以下資料:

【USB 系列】自定義 USB HID 設(shè)備(bzhou830)

【小安派試玩】基于 HID 協(xié)議的 USB 鍵盤測(cè)試(iiv

(二十)零基礎(chǔ)開發(fā)小安派-Eyes-S1【番外篇】——BLE 基礎(chǔ)通訊

用 btstack 開發(fā)一個(gè)簡(jiǎn)單的藍(lán)牙自拍桿

【低功耗藍(lán)牙】⑤ HID 協(xié)議

USB HID 報(bào)告描述符教程 - 知乎

HID 自拍原理

其實(shí)想要實(shí)現(xiàn)藍(lán)牙自拍功能其實(shí)比較簡(jiǎn)單,目前市面上的手機(jī)大多都可以通過按“音量-”按鍵進(jìn)行拍照。知道了這個(gè)實(shí)現(xiàn)起來就比較簡(jiǎn)單了。只要我們能夠模擬點(diǎn)擊“音量-”按鍵就可以實(shí)現(xiàn)遙控拍照功能。

既然知道了拍照原理下一步我們就要開始想辦法通過 HID 實(shí)現(xiàn)這個(gè)功能。

前置條件

自拍桿 HID 報(bào)告描述【使用的話把# 替換換成 //】

# Report ID 1: Advanced buttons
0x05, 0x0C, # Usage Page (Consumer)
0x09, 0x01, # Usage (Consumer Control)
0xA1, 0x01, # Collection (Application)
0x85, 0x01, # Report Id (1)
0x15, 0x00, # Logical minimum (0)
0x25, 0x01, # Logical maximum (1)
0x75, 0x01, # Report Size (1)
0x95, 0x01, # Report Count (1)
0x09, 0xCD, # Usage (Play/Pause)
0x81, 0x06, # Input (Data,Value,Relative,Bit Field)
0x0A, 0x83, 0x01, # Usage (AL Consumer Control Configuration)
0x81, 0x06, # Input (Data,Value,Relative,Bit Field)
0x09, 0xB5, # Usage (Scan Next Track)
0x81, 0x06, # Input (Data,Value,Relative,Bit Field)
0x09, 0xB6, # Usage (Scan Previous Track)
0x81, 0x06, # Input (Data,Value,Relative,Bit Field)
0x09, 0xEA, # Usage (Volume Down)
0x81, 0x06, # Input (Data,Value,Relative,Bit Field)
0x09, 0xE9, # Usage (Volume Up)
0x81, 0x06, # Input (Data,Value,Relative,Bit Field)
0x0A, 0x25, 0x02, # Usage (AC Forward)
0x81, 0x06, # Input (Data,Value,Relative,Bit Field)
0x0A, 0x24, 0x02, # Usage (AC Back)
0x81, 0x06, # Input (Data,Value,Relative,Bit Field)
0xC0 # End Collection

作者:我是鵬老師 https://www.bilibili.com/read/cv15067064/

有了它我們就可以模擬手機(jī)按鍵了。

具體實(shí)現(xiàn)

這里藍(lán)牙部分主要參考官方的教程里面的藍(lán)牙功能

【完全開源】智能桌面助手——AiPi-DSL_Dashboard

https://bbs.ai-thinker.com/forum.php?mod=viewthread&tid=42026&fromuid=16612

資料獲取

AiPi-DSL_Dashboard 資料包地址:https://docs.ai-thinker.com/dsl
AiPi-DSL_Dashboard 資料包地址(Github): https://github.com/Ai-Thinker-Open/AiPi-Open-Kits/tree/master/AiPi-DSL_Dashboard

wKgZoWcbMU2AGaqUAAA5Vcvzij0641.jpg

項(xiàng)目目錄結(jié)構(gòu)

-BLE_HID 負(fù)責(zé)藍(lán)牙

-main 程序主入口

-wifi MQTT 接入準(zhǔn)備

程序

main

int main(void) { …… // 保留藍(lán)牙相關(guān)任務(wù) xTaskCreate(ble_hid_task, (char*)"ble_hid_task", 1024, NULL, 10, NULL); vTaskStartScheduler(); …… }

ble_hid_dev.c藍(lán)牙任務(wù)管理

/** * @brief HID 任務(wù) * @param arg */ void ble_hid_task(void* arg) { // 主要是通知【lvgl】UI更新藍(lán)牙狀態(tài)的由于沒有屏幕暫時(shí)注釋以下兩行代碼 // ble_queue = xQueueCreate(1, 512); // xTaskCreate(queue_receive_ble_task, "queue_ble_task", 1024, arg, 7, NULL); vTaskDelay(200/portTICK_RATE_MS); hid_key_num_t kb_num; btblecontroller_em_config(); ble_init(); bas_init(); dis_init(0x01, 0x07AF, 0x707, 0x2A50); hog_kb_init(); ble_kb_start(); ble_hid_queue = xQueueCreate(1, 4); while (1) { xQueueReceive(ble_hid_queue, &kb_num, portMAX_DELAY); ble_hid_dev_send(kb_num); } }

ble_hid_dev.h文件中添加

typedef enum { HID_KEY_NUMBLE_NONE = 0, HID_KEY_NUMBLE_SELFIE_STICK,// 自拍桿 …… }

kb.h文件中添加

typedef enum { KEY_NUMBLE_SELFIE_STICK = 0X10, // 拍照 …… } int send_selfie_stick_value(struct bt_conn* conn, uint8_t* keyboard_cmd); // 拍照指令

修改kb.c

增加

static uint8_t report_selfie_stick_map[] = { // Report ID 1: Advanced buttons 0x05, 0x0C, // Usage Page (Consumer) 0x09, 0x01, // Usage (Consumer Control) 0xA1, 0x01, // Collection (Application) 0x85, 0x01, // Report Id (1) 0x15, 0x00, // Logical minimum (0) 0x25, 0x01, // Logical maximum (1) 0x75, 0x01, // Report Size (1) 0x95, 0x01, // Report Count (1) 0x09, 0xCD, // Usage (Play/Pause) 0x81, 0x06, // Input (Data,Value,Relative,Bit Field) 0x0A, 0x83, 0x01, // Usage (AL Consumer Control Configuration) 0x81, 0x06, // Input (Data,Value,Relative,Bit Field) 0x09, 0xB5, // Usage (Scan Next Track) 0x81, 0x06, // Input (Data,Value,Relative,Bit Field) 0x09, 0xB6, // Usage (Scan Previous Track) 0x81, 0x06, // Input (Data,Value,Relative,Bit Field) 0x09, 0xEA, // Usage (Volume Down) 0x81, 0x06, // Input (Data,Value,Relative,Bit Field) 0x09, 0xE9, // Usage (Volume Up) 0x81, 0x06, // Input (Data,Value,Relative,Bit Field) 0x0A, 0x25, 0x02, // Usage (AC Forward) 0x81, 0x06, // Input (Data,Value,Relative,Bit Field) 0x0A, 0x24, 0x02, // Usage (AC Back) 0x81, 0x06, // Input (Data,Value,Relative,Bit Field) 0xC0 // End Collection //通用按鍵 // 0x05, 0x0C, // Usage Page (Consumer) // 0x09, 0x01, // Usage (Consumer Control) // 0xA1, 0x01, // Collection (Application) // 0x85, 0x03, // Report ID (3) // 0x15, 0x00, // Logical Minimum (0) // 0x25, 0x01, // Logical Maximum (1) // 0x75, 0x01, // Report Size (1) // 0x95, 0x0B, // Report Count (11) // 0x0A, 0x23, 0x02, // Usage (AC Home) // 0x0A, 0x21, 0x02, // Usage (AC Search) // 0x0A, 0xB1, 0x01, // Usage (AL Screen Saver) // 0x09, 0xB8, // Usage (Eject) // 0x09, 0xB6, // Usage (Scan Previous Track) // 0x09, 0xCD, // Usage (Play/Pause) // 0x09, 0xB5, // Usage (Scan Next Track) // 0x09, 0xE2, // Usage (Mute) // 0x09, 0xEA, // Usage (Volume Decrement) // 0x09, 0xE9, // Usage (Volume Increment) // 0x09, 0x30, // Usage (Power) // 0x0A, 0xAE, 0x01, // Usage (AL Keyboard Layout) // 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) // 0x95, 0x01, // Report Count (1) // 0x75, 0x0D, // Report Size (13) // 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) // 0xC0, // End Collection };

經(jīng)過測(cè)試以上兩套報(bào)告描述都可以拍照,內(nèi)容稍有不同。

修改

static ssize_t read_report_map(struct bt_conn* conn, const struct bt_gatt_attr* attr, void* buf, uint16_t len, uint16_t offset) { printf("read_report_map:%d rn", len); // report_selfie_stick_map 這個(gè)是自拍桿報(bào)告描述 return bt_gatt_attr_read(conn, attr, buf, len, offset, report_selfie_stick_map, sizeof(report_selfie_stick_map)); }

增加

int send_selfie_stick_value(struct bt_conn* conn, uint8_t* keyboard_cmd) { struct bt_gatt_attr* attr; attr = &attrs[BT_CHAR_BLE_HID_REPORT_ATTR_VAL_INDEX]; return bt_gatt_notify(conn, attr, keyboard_cmd, 1); }

ble_hid_dev_send 方法中添加

switch (key_num) { case HID_KEY_NUMBLE_SELFIE_STICK: { key_vaule[0] = KEY_NUMBLE_SELFIE_STICK; // 0x10 // 按下音量鍵- send_selfie_stick_value(ble_conn_handle, key_vaule); vTaskDelay(100/portTICK_RATE_MS); key_vaule[0] = 0x00; // 釋放音量鍵- send_selfie_stick_value(ble_conn_handle, key_vaule); LOG_I("HID SEND: 0x10"); } break; …… }

拍照發(fā)送的指令為什么是 0x10 呢,看下面消息體信息就會(huì)理解。

wKgaoWcbMU6Ac81QAAAgI97LFq8725.jpg

0x10 表示音量-

現(xiàn)在消息發(fā)送搞定了,那要怎么將消息發(fā)出去,如何觸發(fā)呢

按鈕

目前最簡(jiǎn)單的就是增加按鈕了那么如何增加按鈕呢

可以參考,以下兩張圖摘自

32 單片機(jī)基礎(chǔ):GPIO 輸入
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/weixin_64484421/article/details/136200996
————————————————
原文鏈接:https://blog.csdn.net/weixin_64484421/article/details/136200996

wKgZoWcbMU-ANesyAABezQqBXgM676.jpg

wKgaoWcbMU-Ad3SaAACNOlqQJvc229.jpg

兩種方式,我們一般用下接的方式。

第一個(gè)圖:注意點(diǎn)。當(dāng)按鍵按下,PA0 接地,被置為低電平, 但是一旦按鍵松手,PA0 懸空,引腳電壓不確定。所以無論怎么讀引腳也不知道知否被按下,所以為了解決這個(gè)問題,所以必須要求 PA0 是上拉輸入的模式,這樣引腳懸空的話,就會(huì)被置為高電平,這樣我們我們就可以讀取 PA0 的電壓就知道按鍵是否被按下。

但是第二個(gè)圖就不會(huì)出現(xiàn)問題,按下時(shí),被置為低電平,松手,由于上拉電阻的作用,被置為高電平。這樣引腳就不會(huì)出現(xiàn)浮空狀態(tài)。所以此時(shí) PA0 可以配置浮空輸入和上拉輸入。上拉輸入,兩個(gè)電阻共同作用,這樣高電平就會(huì)更加穩(wěn)定一些,

第三個(gè)圖同樣注意要使用下拉輸入模式。

這里沒有上下拉,直接使用的 Ai-M61-32SU 內(nèi)部的上拉

struct bflb_device_s* btn_gpio; // 初始化gpio int btn_clicked = 0; // 按鈕檢測(cè)任務(wù) static void btn_event(void* args){ while (1) { int status = bflb_gpio_read(btn_gpio, GPIO_PIN_14); // 檢測(cè)gpio14是否為低電平,默認(rèn)上拉高電平 if(status == 0){ // 消除抖動(dòng) vTaskDelay(15/portTICK_RATE_MS); 再判斷一次 if(status == 0){ // 防止多次觸發(fā) if(btn_clicked){ continue;; } LOG_I("點(diǎn)擊"); btn_clicked = 1; hid_key_num_t hid_key_num = HID_KEY_NUMBLE_SELFIE_STICK; // 發(fā)送音量-按鍵進(jìn)行拍照 xQueueSend(ble_hid_queue, &hid_key_num, portMAX_DELAY); } }else{ btn_clicked = 0; } } } int main(void) { board_init(); // gpio初始化 btn_gpio = bflb_device_get_by_name("gpio"); // 默認(rèn)上拉 bflb_gpio_init(btn_gpio, GPIO_PIN_14, GPIO_INPUT| GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); …… // 創(chuàng)建按鈕檢測(cè)任務(wù) xTaskCreate(btn_event, "btn_event", 1024, NULL, 1, NULL); …… vTaskStartScheduler(); }

以上就完成了自拍桿的全部功能了。

wKgZoWcbMVCAbh7NAAAIfKTsQnc894.jpg

這個(gè)就是發(fā)現(xiàn)的自拍桿設(shè)備藍(lán)牙名稱與外觀。

其他

這里有個(gè)有意思的地方就是可以改變藍(lán)牙的外觀圖標(biāo)。HID 服務(wù)的 UUID 是 0x1812,鼠鍵的外觀是 0x03C0,鍵盤的外觀是 0x03C1,鼠標(biāo)的外觀是 0x03C2,游戲手柄的外觀是 0x03C3。

想要改變藍(lán)牙設(shè)備外觀

修改 kb.h 第 10 行

#define BLE_APPEARANCE_HID_KEYBOARD 0x03C3

編譯并燒錄完成后,搜索藍(lán)牙就可以看到效果了。

源碼在文章評(píng)論區(qū)自取。目前只實(shí)現(xiàn)了功能,外觀上還沒設(shè)計(jì)比較丑陋暫時(shí)就不上圖了。可持續(xù)關(guān)注原貼:【DIY電子作品】Ai-M61-32SU 手機(jī)藍(lán)牙自拍桿https://bbs.ai-thinker.com/foru

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 藍(lán)牙
    +關(guān)注

    關(guān)注

    114

    文章

    5809

    瀏覽量

    170188
  • 藍(lán)牙技術(shù)
    +關(guān)注

    關(guān)注

    45

    文章

    341

    瀏覽量

    52904
  • WIFI
    +關(guān)注

    關(guān)注

    81

    文章

    5296

    瀏覽量

    203569
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    自拍撬動(dòng)藍(lán)牙世界的神經(jīng)

    在這里我們不詳細(xì)討論藍(lán)牙芯片的那些事情,只是從很小很不起眼的自拍中發(fā)現(xiàn)了個(gè)了不起的現(xiàn)象,那就是:
    發(fā)表于 04-18 17:26 ?2042次閱讀

    M61模組做一個(gè)紅外空調(diào)遙控器

    管的亮滅來承載編碼信息,對(duì)應(yīng)的空調(diào)設(shè)備上有個(gè)接收管,它接收到發(fā)射管的光信號(hào)來解析協(xié)議獲取數(shù)據(jù),然后對(duì)空調(diào)進(jìn)行對(duì)應(yīng)指令的控制 例如:將溫度設(shè)置為 16° 冷風(fēng) 風(fēng)速 1 級(jí) 既然要控制燈的亮滅,那么就只需要
    的頭像 發(fā)表于 08-23 08:58 ?1101次閱讀
    <b class='flag-5'>用</b> <b class='flag-5'>M61</b>模組<b class='flag-5'>做一個(gè)</b>紅外空調(diào)遙控器

    自拍不再困難 Stikbox手機(jī)殼變身自拍

    【路之遙電子網(wǎng)】無論你多么支持自拍,你都難以抵抗這件酷炫的集合自拍、手機(jī)殼和支架為體的
    發(fā)表于 12-21 15:05

    低功耗藍(lán)牙自拍芯片:st17h29 正反回連功能

    ,任何特殊應(yīng)用拍照器類產(chǎn)品。[/tr]注:帶正反回連功能,首次連接,自拍開機(jī),在手機(jī)設(shè)置/藍(lán)牙/打開搜索藍(lán)牙設(shè)備/點(diǎn)擊連接。首次連接成功,
    發(fā)表于 06-02 16:14

    靈動(dòng)微電子 | MM32W無線MCU系列產(chǎn)品應(yīng)用筆記 —— 藍(lán)牙自拍方案

    個(gè)藍(lán)牙產(chǎn)品的應(yīng)用方案,基于MM32W系列開發(fā)的藍(lán)牙自拍
    發(fā)表于 01-13 19:17

    基于藍(lán)牙技術(shù)的自拍設(shè)計(jì)

    的場(chǎng)景、方便人們的生活。硬件資源:本方案基于MM32 BLE_Test Board進(jìn)行測(cè)試驗(yàn)證,藍(lán)牙自拍應(yīng)用在硬件上只需要個(gè)功能按鍵即可
    發(fā)表于 11-26 06:48

    基于嵌入式芯片的自拍神器自拍

    相當(dāng)于是個(gè)只有個(gè)按鍵的藍(lán)牙鍵盤,這個(gè)按鍵對(duì)應(yīng)手機(jī)上的音量增大鍵(位于
    發(fā)表于 10-27 17:07

    使用 MSPM0 MCU 設(shè)計(jì)單軸和三軸自拍

    驅(qū)動(dòng)個(gè)或三個(gè)電機(jī)以產(chǎn)生反向移動(dòng),用于抵消手機(jī)屏幕的振動(dòng)并在拍攝照片或視頻時(shí)使手機(jī)穩(wěn)定。為了在云臺(tái)或自拍
    發(fā)表于 04-12 14:02

    【沁恒 CH32V208 開發(fā)板免費(fèi)試用】改進(jìn)的藍(lán)牙自拍

    拍照功能,而藍(lán)牙自拍就是利用了這特性,將自拍的遙控器以
    發(fā)表于 04-29 22:48

    TCL 飛利浦超級(jí)SMT M61機(jī)芯電路圖

    TCL SMT M61彩電電路圖TCL SMT M61彩色電視機(jī)電路圖,TCL SMT M61彩電圖紙,TCL SMT M61原理圖。
    發(fā)表于 05-06 14:40 ?35次下載
    TCL 飛利浦超級(jí)SMT <b class='flag-5'>M61</b>機(jī)芯電路圖

    無線MCU系列藍(lán)牙自拍應(yīng)用方案的詳細(xì)介紹

    的場(chǎng)景、方便人們的生活。 硬件資源: 本方案基于MM32 BLE_Test Board進(jìn)行測(cè)試驗(yàn)證,藍(lán)牙自拍應(yīng)用在硬件上只需要個(gè)功能按鍵
    發(fā)表于 01-20 14:40 ?2286次閱讀

    靈動(dòng)微MM32W無線MCU系列藍(lán)牙自拍應(yīng)用方案

    的場(chǎng)景、方便人們的生活。硬件資源:本方案基于MM32 BLE_Test Board進(jìn)行測(cè)試驗(yàn)證,藍(lán)牙自拍應(yīng)用在硬件上只需要個(gè)功能按鍵即可
    發(fā)表于 11-18 17:36 ?11次下載
    靈動(dòng)微MM32W無線MCU<b class='flag-5'>系列</b><b class='flag-5'>藍(lán)牙</b><b class='flag-5'>自拍</b><b class='flag-5'>桿</b>應(yīng)用方案

    MM32W無線MCU系列產(chǎn)品應(yīng)用筆記 —— 藍(lán)牙自拍方案

    在前面章中我們已經(jīng)詳細(xì)介紹了我們基于MM32W系列開發(fā)的智能燈控方案,在本章節(jié)我們將介紹款大家生活中很常見的個(gè)
    發(fā)表于 02-09 12:08 ?5次下載
    MM32W無線MCU<b class='flag-5'>系列</b>產(chǎn)品應(yīng)用筆記 —— <b class='flag-5'>藍(lán)牙</b><b class='flag-5'>自拍</b><b class='flag-5'>桿</b>方案

    Ai-M61-32S開發(fā)板能玩出多少拓展板?

    時(shí)間過的真快,眨眼間樓主玩M61這個(gè)模組已經(jīng)有一個(gè)多月了,學(xué)習(xí)的同時(shí)結(jié)交了很多不講武德志同道合的朋友,從最開始剛接觸的點(diǎn)燈到慢慢嘗試上手用M61驅(qū)動(dòng)各種電子模塊,深感還要學(xué)習(xí)很多。
    的頭像 發(fā)表于 11-13 10:29 ?452次閱讀
    <b class='flag-5'>用</b>Ai-<b class='flag-5'>M61</b>-32S開發(fā)板能玩出多少拓展板?

    DIY案例:Ai-M61-32S做一個(gè)多功能書桌燈

    這個(gè)書桌燈可以通過Ai-M61-32S聯(lián)網(wǎng)實(shí)時(shí)顯示時(shí)間,通過dht11溫濕度模塊顯示溫濕度,同時(shí)具備抽拉式手機(jī)支架,可以將手機(jī)放在上面,同時(shí)可以通過
    的頭像 發(fā)表于 01-25 15:05 ?625次閱讀
    DIY案例:<b class='flag-5'>用</b>Ai-<b class='flag-5'>M61</b>-32S<b class='flag-5'>做一個(gè)</b>多功能書桌燈
    RM新时代网站-首页