2022年5月28日 星期六

Arduino的IR與藍芽控制

前言

在2020年,Blog主寫了一篇文章,介紹一個遙控器整合裝置,Nature Remo mini Remo,目前Blog主也還在使用。隨時用手機遙控家裡的各個裝置確實很方便,而且Blog主很喜歡它跟ios的shortcut整合,能夠在iPhone主畫面設定常用的按鈕。

不過同時,只能用手機操控也成為一個缺點,特別是解鎖需要花時間,以及半夜的時候看手機螢幕會影響睡眠,所以...要是我能夠有幾顆常用的大按鈕,同時操控不同家電,更進一步,還能夠控制手機音樂撥放,那就更完美了,起碼Blog主是這麼想的。

市面上有很多相關產品,最簡單的是一個萬用遙控器上面有幾十個小按鈕(半夜時很難找),不然就是自帶簡單螢幕的(半夜不想看螢幕),當然,聲控也是目前流行的解決方案,但Blog主也不喜歡半夜起來還要講一大堆話來控制。最後,我找到最接近的解決方案是IKEA的TRADFRI系列,還有Philips的Hue系列,都有實體的按鈕,但功能有限,能不能跟其他電器整合,自由度還是有很大的問題。

所以到頭來Blog主想乾脆自己來做一個算了,但說的簡單,其實會牽涉很多方面的實作。而軟體方面出身的Blog主,自然先從電子相關的部分先下手了,也是這次要講的重點,嵌入式硬體的Arduino。

Arduino相關的543

電子零組件

Blog主這次買的是ELEGOO的Arduino Starter Kit,裡面有UNO R3本體,以及附帶很多零件,品質還算可以,日本Amazon上面選擇沒很多,Blog主也有點懶的個別買。這麼多零件裡面,個人目前主要用的是麵包板跟電線,電阻,IR接收器,裡面有一般發光用的LED燈,不過沒有能發紅外線的LED燈,所以Blog主另外在Amazon買了940nm的LED燈。

Arduino UNO R3 & ESP32

左邊是ESP32,右邊是UNO R3

Arduino的硬體其實有很多種版本,Blog主第一個買的是UNO R3,不過沒有自帶WiFi跟藍芽,還要另外加版子才能用,有點麻煩,索性就買了ESP32。ESP32的尺寸比UNO R3小很多,性能更好,又有自帶WiFi跟藍芽,不難理解是這幾年的寵兒。其實ESP32也算是Arduino的一種硬體,Arduino的IDE支援性也很好。

Arduino IDE & Scratch for Arduino

開發環境方面,Arduino官方的IDE還算方便,
如果像Blog主一樣習慣VS code,也可以用微軟開發的Extension,Blog主發現兩者一般功能跟操作幾乎一樣

Arduino主要用的語言是客製化的Scratch,基本上與C++很相近,Blog主出來工作之後,因為工作性質的關係,幾乎都只有個人嗜好的程度在碰C/C++了。不過大學時代也摸了一兩年的C/C++,基本上還算習慣。但當Blog主想用map這種字典式的資料型態時,就開始遇到麻煩,查了一下才發現Scratch沒有原生支援STL,雖然網上有人做了ArduinoSTL,但Bug似乎有點多。總之,想把它當完整的C++來用還是有點問題的,一些平常習慣的功能可能無法使用。

IR控制

IR控制方面,Blog主用的是shirriff製作的IRremote,可以直接在Arduino的Library Manager裡面找到。網路上很多這個Library的範例,有一部分是2.X版本的,要注意3.X版本與2.X版本有很大的差異,在GitHub的README.md也有一段「Converting your 2.x program to the 3.x version」簡單解釋如何轉換,不過Blog主建議直接去看它的範例cpp檔會比較快,推薦「SendAndReceive」。

藍芽控制

藍芽控制方面,Blog主用的是特別為ESP32開發的library「ESP32 BLE Keyboard library」,目前似乎還沒上架Arduino的Library Manager,需要直接從Git載。作者給的Sample只有一個「SendKeyStrokes.ino」,但也因為用法實在非常簡單,短短幾行就能看懂如何使用了,特別是Blog主就只要撥放暫停鍵而已。另外,關於設定藍芽裝置名稱沒在Sample裡,Blog主也稍微翻了一下它的cpp檔,發現用「bleKeyboard.setName("XXX");」就能設定了。

總結

Blog主目前試成功遙控家裡的燈、電視、音箱、以及平常拿來放音樂的iPhone8,最核心的機能部分大概3~4天就完成了。不過剩下來的都是Blog主相對不熟悉的部分,電路板的焊接,電源方面的安全設計,3D設計/列印,這方面打算未來嘗試一輪後,再回來套用在這次Blog主的個人Project上。

沒有留言:

張貼留言