前往
大廳
主題 達人專欄

【IOT】硬體不可怕,從零開始(ESP8266) 無線遙控車製作 #遙控器篇

%%鼠 拒收病婿 | 2022-12-12 20:11:56 | 巴幣 1156 | 人氣 1086

前言&致謝

為甚麼說「從零開始」呢,主要因為這是我第一次接觸硬體,之前覺得硬體很難、很可怕,但是畢業前想給自己挑戰一下,所以毅然決然決定期末課堂專題要做出一個遙控車車。想要致謝的是,非常感謝開發路上與我討論、解惑的巴友們,謝謝你們,讓我不會被無助感勸退。

*使用ESP8266是因為他比較便宜,要做到低延遲可能要使用ESP32的藍芽功能,但我還滿會燒壞板子的,所以先用便宜的。
 
成品:

程式碼一樣在個人網站上比較方便觀看


遙控器材料

  • ESP8266
  • 3V電池 (兩個3A電池串聯)
  • MCP3008:類比數位轉換器(ADC),主要是因為ESP板子只有一個類比接口,但JoyStick有兩個(x,y)類比訊號,所以須使用ADC擴充。
  • JoyStick模組

NodeMCU ESP8266

叫它ESP8266其實不太正確,ESP8266是上面的wifi模組晶片,而下面比較大的是NodeMCU擴充基座。
ESP8266 晶片

再注意的是NodeMCU有分V3 (CH340),和V2(CP2102 )兩版,主要差在尺寸和USB晶片,如果要再買擴充基座的話要仔細看好版本。
(左)NodeMCU V3;(中)NodeMCU V2 ;(右) V2的擴充基座。 但V2的USB微處理器被我燒掉了。
 
簡單介紹針腳,詳細規格可參照[1]。
左半邊多為"S"開頭的針腳,S表"Serial",通常是走SPI協定時需要用到。

硬體傳輸介面[2]

傳輸介面常見的有UART、I2C、SPI,通常板子上都會提供多種介面針腳供使用。

UART

UART使用RX和TX接口進行一對一傳輸: R表接收"Receive"、T表傳輸"Transport"。 當兩裝置要透過UART相接時,需Rx接另一端的Tx,反之亦然。
例如以前的序列埠(Serial port) RS系列,以前鍵盤是透過這種接頭連接電腦,現在多演變成USB了。
優點:接孔簡單。
缺點:傳輸慢、只能一對一。
RS-232母接頭 (圖)
 

I2C

I2C一樣只使用兩個針腳(串列資料線SDA、串列時鐘線SCL)連接,但透過時脈分流,達到一對多個裝置的連接。[3]
有些裝置(如加速度模組)會提供走I2C介面或SPI介面的接口。
如果走I2C介面,可只接SDA和SCL,SDO是走SPI介面的。
 
優點:可接多個裝置。
缺點:不能同時發送與接收訊息。
冷知識:2是2次方的意思,英文應唸作:"I squared C"
 

SPI (串行外設介面)

採全雙工,能同時傳輸與接收訊息,且可接多個裝置(N+3條線)。
記憶體(如SD卡、快閃)是基於這個介面做發展的。
圖源[4],每多接一個裝置就需多一條SS線路。SS(片選訊號)一般為低電位,由主機選擇要使要哪個裝置。

優點:速度較快、可接多個裝置。
缺點:每多接一個裝置就需多一條SS線路。
 
講完古之後,接下來要解釋怎麼接JoyStick。

2軸JoyStick 模組

針腳如下:
  • GND:接地。
  • +5V:電源,接3v即可使用。
  • VRx:輸出類比x軸資訊。
  • VRy:輸出類比y軸資訊。
  • SW:按鈕(輸出0,1)。
 
圖源[5],x,y值域[0,1023],介於中間時回傳[512,512]。
 

MCP3008

由於JoyStick需要2個類比接口,而NodeMCU只有一個A0針腳,所以會需要透過數位類比轉換器(analog digital converter,ADC)去做擴充。
MCP系列應該都可以,我是手邊剛好有MCP3008就直接拿來用了。(不同版跟能讀取的位元數有關,3008能讀8位元(0~1023))
圖源[6]
接口:
  • VDD:通常指正電輸入[7]。
  • VRef:轉換過程的參考電壓,不能超過VDD。 這裡為了方便,可以跟VDD接同一個3v3電源輸入。
  • AGND:類比接地。
  • CLK:時脈訊號。
  • Dout:輸出(MISO)。
  • Din:輸入(MOSI)。
  • CS:晶片選擇。
  • DGND:數位接地,可跟AGND接同一個。
 
[範例]  (使用[8]提供的函式庫)

結果(joy stick只接在channel 0 和 1,其他是亂數)

我這邊多做了標準化,讓值介於[-1,1]。  因為我硬體本身的y軸的值有點歪掉了,所以在標準化時做數值補償。


電池供電

整理一下NodeMCU有以下幾種供電方式:
  • VIN: 能接4.5~10V的電源輸入(例如9V電池)。且會經過降壓處理,確保流入晶片的電壓為3.3V。
  • USB供電:感覺是最穩的,我在實做車子時試過串聯或並聯了多個模組,在9V電池供電情況下會有電流不足的問題,但USB供電卻可以解決。
  • 3.3V:直接將電源輸入接在3v3針腳,最危險,因為這是直接流過晶片,沒經過任何降壓等保護,只要超過3.6V就有高機率燒死晶片。
 

後記:
這系列應該會有3章,分別介紹遙控器、車車、Wifi。焊接的介紹應該會打在車車那篇。
 
 

參考&延伸閱讀資料:
  1. NodeMCU ESP8266 Specifications, Overview and Setting Up (make-it.ca)
  2. 【Maker進階】認識UART、I2C、SPI三介面特性 | MakerPRO科技創新實作社群媒體
  3. I²C - 維基百科,自由的百科全書 (wikipedia.org)
  4. 序列周邊介面 - 維基百科,自由的百科全書 (wikipedia.org)
  5. In-Depth: How 2-Axis Joystick Works? Interface with Arduino & Processing (lastminuteengineers.com)
  6. 從類比到數位轉換器讀取值 | Microsoft Learn
  7. Vcc、Vee、Vdd、Vss、Vref的區別_白粥行的博客-CSDN博客_vcc和vee的區別
  8. nodesign/MCP3008: MCP3008 - Analog to digital converter Arduino library (github.com)
 


送禮物贊助創作者 !
0
留言

創作回應

在意你就輸了
大佬公然開車,讚
2022-12-12 21:51:28
%%鼠 拒收病婿
小孩開大車[e5]
2022-12-12 22:50:53
多古尼爾拉布拉布拉格
好霸 什麼都會
2022-12-12 22:40:12
%%鼠 拒收病婿
窩不會算歐姆定律 :(
2022-12-12 23:09:34
⊰⊱求出處學術用⊰⊱
2022-12-12 23:18:46
%%鼠 拒收病婿
感謝佬
2022-12-13 00:16:41
也龍
硬體很可怕 我光LED就弄到幾乎全滅了
2022-12-13 23:13:24
%%鼠 拒收病婿
我也燒壞幾個LED,傳輸介面懂了之後就能快速上手[e12] 比較難的是後期接多個設備後,電力不足等看不到的問題。
一起加油吧。(´▽`ʃ♡ƪ)
2022-12-14 02:22:52
也龍
看得到的問題 我都不見得搞得懂w
不過昨天知道朋友整塊板子燒壞我就安心了X)
2022-12-16 20:29:52
追蹤 創作集

作者相關創作

更多創作