樹莓派視頻遙控小車 + iOS / Android / web應(yīng)用

更新續(xù)篇>>會聊天的樹莓派視頻遙控小車 + iOS / Android / web應(yīng)用

本文介紹了一種樹莓派遙控小車的實現(xiàn)鞠抑,做這個的初衷是希望能在不同平臺和樹莓派愉快地玩耍包蓝,所以視頻直播用了 HLS 技術(shù)硝烂,缺點是有一定延遲别威。iOS 和 Android 客戶端使用React Native查排,web端為 React凳枝,后臺為 NodeJS,通信使用 websocket。主要功能有視頻監(jiān)控岖瑰,溫濕度檢測叛买,紅外遙控等。出于方便蹋订,一部分 GPIO 操作還是用的 Python 和 C率挣。具體代碼請見:https://github.com/shaqian/PiBot


手機應(yīng)用演示


PiBotApp


應(yīng)用界面


組裝演示


元件列表

樹莓派:Raspberry Pi v3 Model B

樹莓派攝像頭: 8MP Raspberry Pi Camera v2

Micro SD 內(nèi)存卡:8G 或以上

USB聲卡

麥克風:3.5mm 接口

迷你音箱:3.5mm 接口

小車底盤:ZK-4WD

馬達驅(qū)動:L298n

5v電源:給樹莓派供電

電池電源:兩節(jié)18650 (3.7v)電池加電池殼,給馬達驅(qū)動供電

DC降壓模塊:LM2596S露戒,7.4v轉(zhuǎn)5v椒功,給舵機供電

舵機:SG90 9g

舵機底座:我用的是這個,但只用了單層智什,因為樹莓派只有2組硬件 PWM动漾,需要留一組給紅外輸出。

紅外發(fā)射模塊:可以用 Arduino 的紅外發(fā)射模塊 KY-005荠锭,但是可達距離較短旱眯。推薦這個大功率紅外模塊,距離可達幾米证九。

紅外接收模塊:KY-022 (IR Receiver for Arduino)

面包板:SYB-170

杜邦線:20或30厘米删豺,公對母

電阻:1/4W 1kΩ & 2kΩ


設(shè)置樹莓派和網(wǎng)絡(luò)

如果不是第一次使用樹莓派,可跳過此部分內(nèi)容愧怜。

1) 安裝樹莓派系統(tǒng) (Mac)

從鏡像安裝 Raspbian

1. 下載 .zip 文件?RASPBIAN STRETCH WITH DESKTOP吼鳞。

2. 解壓并得到 2017-07-05-raspbian-jessie.img。

3. 打開終端叫搁,運行 diskutil list 列出所有磁盤赔桌。

4. SD 卡插入讀卡器并連接電腦。

5. 再次運行 diskutil list渴逻,找到 SD 卡的 disk (并非 partition)疾党,比如 disk3 ,而不是 disk3s1惨奕。

6. 運行 sudo diskutil unmountDisk /dev/disk[n] 解掛SD卡 (將[n]替換為上一步得到的disk編號雪位,比如:/dev/disk3)。

7. 將鏡像拷貝至 SD 卡:sudo dd bs=1m if=[path-to-the-image-file] of=/dev/rdisk[n] conv=sync?(替換 [path-to-the-image-file] 為鏡像文件路徑梨撞,例如 ~/Downloads/2017-07-05-raspbian-jessie.img, 并將 [n] 替換為正確的 disk 編號雹洗,比如:/dev/rdisk3)。

2) SSH至Raspberry Pi?

1. 啟用SSH:

2016年11月之后發(fā)布的 Raspbian 默認關(guān)閉了 SSH卧波,啟用方式是在 SD 卡的根目錄創(chuàng)建一個名為 ssh 的文件时肿,不帶任何擴展名。

2. 從電腦彈出 SD 卡港粱,并插入樹莓派螃成。

3. 將樹莓派用網(wǎng)線連接至家用路由器旦签,并用 5v 電源給樹莓派供電。

4. 找到樹莓派的 IP寸宏。如果沒用路由器的權(quán)限宁炫,可以運行 sudo nmap -sP -PI -PT 192.168.1.0/24 掃描家庭網(wǎng)絡(luò)中的所有設(shè)備。

5. 打開終端氮凝,運行 ssh pi@[IP-of-Raspberry-Pi] (將 [IP-of-Raspberry-Pi] 替換為實際的IP地址羔巢,比如:192.168.1.16),輸入默認密碼 raspberry 罩阵。

6. (可選) 修改密碼:passwd pi朵纷。

3) (可選) 配置圖形遠程桌面

1. 如未安裝VNC connect,運行:
sudo apt-get update
sudo apt-get install realvnc-vnc-server realvnc-vnc-viewer

2. 啟用 VNC Server永脓,運行 sudo raspi-config 袍辞,選擇 Interfacing Options,選擇 VNC > Yes常摧。

3. 打開 VNC Viewer搅吁,輸入樹莓派的 IP 地址并連接。

4) 連接Wifi

1. 運行 cat /etc/network/interfaces落午,確認已存在以下內(nèi)容:
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

2. 運行 sudo vi /etc/wpa_supplicant/wpa_supplicant.conf谎懦,在最底下添加
network={
ssid="{Name-of-the-Wifi}"
psk="{Password-of-the-Wifi}"
}

3. 運行 sudo service networking restart 以生效,設(shè)置完成后可拔出網(wǎng)線溃斋。


安裝必要軟件

1) Python 3.x

如果 which python3 返回空界拦,運行 sudo apt-get install python3

2) NodeJs 8.x

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt install nodejs
node -v

3) Nginx Server

安裝 nginx:sudo apt-get install nginx梗劫,開啟服務(wù)器 sudo /etc/init.d/nginx start 享甸。

4) 音頻視頻相關(guān)

安裝ALSA開發(fā)庫:sudo apt-get install libasound2-dev。如果返回404梳侨,先運行 sudo apt-get upgrade --fix-missing蛉威。

avconv 用來轉(zhuǎn)換錄像為.mp4格式:sudo apt-get install libav-tools

mpg123 用來播放.mp3:sudo apt-get install mpg123

5) 下載repo

cd ~
git clone https://github.com/shaqian/PiBot.git


測試硬件

1) 馬達驅(qū)動及馬達

1. 按電路圖接線。

2. 安裝?rpio走哺,運行 npm install rpio?

3. 運行 node?

4. 初始化端口輸出:
var rpio = require('rpio');
rpio.open(29, rpio.OUTPUT, rpio.LOW);
rpio.open(31, rpio.OUTPUT, rpio.LOW);
rpio.open(38, rpio.OUTPUT, rpio.LOW);
rpio.open(40, rpio.OUTPUT, rpio.LOW);

5. 前進:
rpio.write(29, rpio.LOW);
rpio.write(31, rpio.HIGH);
rpio.write(38, rpio.LOW);
rpio.write(40, rpio.HIGH);

6. 后退:
rpio.write(29, rpio.HIGH);
rpio.write(31, rpio.LOW);
rpio.write(38, rpio.HIGH);
rpio.write(40, rpio.LOW);

7. 停止:
rpio.write(29, rpio.LOW);
rpio.write(31, rpio.LOW);
rpio.write(38, rpio.LOW);
rpio.write(40, rpio.LOW);

2) 舵機

1. 按電路圖接線:

2. 運行:
cd ~/PiBot/PiBotServer/bin
chmod +x direct.py

3. 舵機角度由duty cycle控制蚯嫌,一般范圍為2.5至11.5。轉(zhuǎn)至中間:
./direct.py 7

4. 左轉(zhuǎn)到底:
./direct.py 2.5

5. 右轉(zhuǎn)到底:
./direct.py 11.5

3) 溫濕度傳感器

1. 按電路圖接線:

2. 運行:
cd ~/PiBot/PiBotServer/bin/temp_hum
chmod +x getTemp.py
chmod +x getHum.py

3. 獲取溫度:
./getTemp.py

4. 獲取濕度:
./getHum.py

4) 紅外接收模塊

紅外接收模塊用來接收和解碼遙控器信號丙躏,然后樹莓派發(fā)送相同信號即可模擬遙控器择示。

代碼借用這個 repo,修改了端口晒旅,以及ST_BASE的值栅盲,樹莓派3 (BCM2837) 為0x3F003000 ,而舊版為 0x20003000敢朱。

1. 按電路圖接線:

2. 運行 gpio -v 檢查是否已安裝wiringPi剪菱。沒有的話摩瞎,安裝 Wiring Pi拴签。

3. 運行 cd ~/PiBot/PiBotServer/bin孝常。編譯代碼生成可執(zhí)行文件:
gcc ir_decode.c -lwiringPi -o decode.out
chmod +x decode.out

4. 運行 sudo ./decode.out。沒有信號時屏幕每秒打印 [0]蚓哩。

5. 將遙控器對準紅外接收模塊并按鍵构灸。解碼后的信號為一串十六進制數(shù),如:0xb2,0x4d,0x1f,0xe0,0x98,0x67,[48]岸梨。

6. 重復(fù)以上步驟喜颁,解碼空調(diào)開機和關(guān)機的信號。

5) 紅外發(fā)射模塊

紅外解碼完成后移除紅外接收模塊

1. 按電路圖接線:

2. 運行以下命令復(fù)制編碼代碼:

cd ~/PiBot/PiBotServer/bin
cp ir_encode.c on.c
cp ir_encode.c off.c

3. 運行 vi on.c曹阔,將 166 行的十六進制數(shù)改為解碼所得的開機信號半开,如:
char data[6] = {0xb2,0x4d,0x1f,0xe0,0xd8,0x27};

4. 運行 vi off.c,將 166 行的十六進制數(shù)改為解碼所得的關(guān)機信號赃份,如:
char data[6] = {0xb2,0x4d,0x7b,0x84,0xe0,0x1f};

5. 編譯代碼生成可執(zhí)行文件:
gcc on.c -lwiringPi -o on.out
chmod +x on.out
gcc off.c -lwiringPi -o off.out
chmod +x off.out

6. 發(fā)射開機信號:sudo ./on.out

7. 發(fā)射關(guān)機信號:sudo ./off.out

6) 聲卡寂拆、麥克風及揚聲器

樹莓派有板載的 3.5mm 音頻接口輸入但沒有輸出,所以我用 USB 聲卡作為音頻輸入和輸出抓韩。

1. USB 聲卡接入樹莓派并連接麥克風及揚聲器纠永。

2. 運行 arecord -laplay -l 確認 USB Audio Device 編號,比如 card 1谒拴。

3. 錄制 5s 的測試錄音:arecord -Dplughw:[n] -fcd -d5 -c1 -twav -r16000 test.wav?(將 [n] 替換為 USB 聲卡的編號尝江,比如 Dplughw:1)。

4. 播放測試錄音:aplay -Dplughw:[n] test.wav?(將 [n] 替換為USB聲卡的編號英上,比如 Dplughw:1)炭序。

5. 將USB聲卡設(shè)為默認音頻設(shè)備,運行 sudo vi /lib/modprobe.d/aliases.conf苍日,寫入以下內(nèi)容并保存:
options snd_usb_audio index=0
options snd_bcm2835 index=1
options snd slots=snd_usb_audio,snd_bcm2835

6. 重啟樹莓派: sudo reboot少态。

7. 運行 cat /proc/asound/modules 確認顯示如下:
0 snd_usb_audio
1 snd_bcm2835

8. 此時播放 .wav 無需指定設(shè)備編號即是 USB 輸出:aplay test.wav

7) 攝像頭

借用?picam 生成 HTTP Live Streaming (HLS) 直播視頻流易遣。

1. 將樹莓派攝像頭接至樹莓派彼妻。

2. 運行 sudo raspi-config,選擇 Interfacing Options豆茫,選擇 Camera?> Yes侨歉。

3. 安裝 picam 的依賴:
sudo apt-get update
sudo apt-get install libharfbuzz0b libfontconfig1

4. 創(chuàng)建目錄和軟連接:
cd ~;mkdir picam;cd picam
cat > make_dirs.sh <<'EOF'

#!/bin/bash
DEST_DIR=~/picam
SHM_DIR=/run/shm
mkdir -p $SHM_DIR/rec
mkdir -p $SHM_DIR/hooks
mkdir -p $SHM_DIR/state
mkdir -p $DEST_DIR/archive
ln -sfn $DEST_DIR/archive $SHM_DIR/rec/archive
ln -sfn $SHM_DIR/rec $DEST_DIR/rec
ln -sfn $SHM_DIR/hooks $DEST_DIR/hooks
ln -sfn $SHM_DIR/state $DEST_DIR/state
EOF

chmod +x make_dirs.sh
./make_dirs.sh

5. 安裝 picam 庫:
wget https://github.com/iizukanao/picam/releases/download/v1.4.6/picam-1.4.6-binary-jessie.tar.xz
tar xvf picam-1.4.6-binary-jessie.tar.xz
cp picam-1.4.6-binary-jessie/picam ~/picam/

6. 創(chuàng)建 HLS 視頻直播流:
cd ~/picam
./picam -o /run/shm/hls

7. 配置 Nginx 服務(wù)器。運行 sudo vi /etc/nginx/sites-available/default揩魂,在 server 的 { ... } 塊中添加以下內(nèi)容:
location /hls/ {
root /run/shm;
}

8. 重啟 Nginx:
sudo /etc/init.d/nginx restart

9. 測試播放視頻流:

HLS 地址為 http://[IP-of-Raspberry-Pi]/hls/index.m3u8

i. 使用 Mac 自帶的 QuickTime 播放:

打開 QuickTime幽邓,選擇 File > Open Location, 輸入 http://[IP-of-Raspberry-Pi]/hls/index.m3u8

ii. 或使用網(wǎng)頁播放:

a. 下載測試用的 html 復(fù)制至 Nginx 服務(wù)器根目錄:
sudo cp ~/PiBot/PiBotServer/public/hls_test.html /var/www/html/hls_test.html

b. 在樹莓派或同一網(wǎng)絡(luò)中的電腦上火脉,打開瀏覽器牵舵,轉(zhuǎn)到 http://[IP-of-Raspberry-Pi]/hls_test.html柒啤。


配置 Nginx 服務(wù)器

啟用 80 端口的 HTTP 以及 443 端口的 HTTPS。如果不啟用 HTTPS畸颅,當域名非 localhost 時將無法使用錄音功能担巩。參考: https://goo.gl/rStTGz

1. 運行 sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/snippets/nginx-selfsigned.key -out /etc/nginx/snippets/nginx-selfsigned.crt 創(chuàng)建 HTTPS 用的證書。

2. 將 /etc/nginx/sites-enabled/default?內(nèi)的內(nèi)容替換為 ~/PiBot/PiBotServer/ngnix/default没炒。

3. 運行 sudo nginx -t?測試配置文件涛癌。如果沒問題,重啟 Nginx 服務(wù)器:sudo /etc/init.d/nginx restart


使用網(wǎng)頁應(yīng)用

1. 運行 cd ~/PiBot/PiBotServer;npm install?安裝依賴送火。

2. 開啟 HLS 直播視頻流:
cd ~/picam
./make_dirs.sh
./picam -o /run/shm/hls --vflip --hflip

3. 開啟網(wǎng)頁應(yīng)用:
cd ~/PiBot/PiBotServer
sudo npm start

4. 在瀏覽器中打開 http[s]://[IP-of-Raspberry-Pi]?(將 IP-of-Raspberry-Pi 替換為實際的網(wǎng)址拳话,比如:192.168.1.16)。


使用移動應(yīng)用

iOS

i. 編譯并在模擬器中運行:
cd PiBot/PiBotApp
npm install
npm run ios

ii. 在設(shè)備上運行:
參考 React Native 官方文檔的 Running your app on iOS devices种吸。

Android

i. 編譯并在模擬器中運行應(yīng)用:
cd PiBot/PiBotApp
npm install
npm run android

ii. 在設(shè)備上運行:
參考 React Native 官方文檔的 Running your app on Android devices弃衍。
或者直接使用repo中的 PiBot.apk。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坚俗,一起剝皮案震驚了整個濱河市镜盯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坦冠,老刑警劉巖形耗,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異辙浑,居然都是意外死亡激涤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門判呕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倦踢,“玉大人,你說我怎么就攤上這事侠草∪杌樱” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵边涕,是天一觀的道長晤碘。 經(jīng)常有香客問我,道長功蜓,這世上最難降的妖魔是什么园爷? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮式撼,結(jié)果婚禮上童社,老公的妹妹穿的比我還像新娘。我一直安慰自己著隆,他們只是感情好扰楼,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布呀癣。 她就那樣靜靜地躺著,像睡著了一般弦赖。 火紅的嫁衣襯著肌膚如雪项栏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天腾节,我揣著相機與錄音忘嫉,去河邊找鬼荤牍。 笑死案腺,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的康吵。 我是一名探鬼主播劈榨,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼晦嵌!你這毒婦竟也來了同辣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤惭载,失蹤者是張志新(化名)和其女友劉穎旱函,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體描滔,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡棒妨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了含长。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片券腔。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拘泞,靈堂內(nèi)的尸體忽然破棺而出纷纫,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布望众,位于F島的核電站喧枷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏染簇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一只泼、第九天 我趴在偏房一處隱蔽的房頂上張望剖笙。 院中可真熱鬧,春花似錦请唱、人聲如沸弥咪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽聚至。三九已至酷勺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扳躬,已是汗流浹背脆诉。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贷币,地道東北人击胜。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像役纹,于是被迫代替她去往敵國和親偶摔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容