如何在Raspberry Pi運行Arduino程式

Raspberry Pi 設定

1. 請點擊以下連結https://www.raspberrypi.org/downloads/,下載最新的Raspberry OS–Raspbian Stretch。將其安裝到Raspberry(可以用NOOBS安裝程式,也可以直接將其安裝到SD卡)。

2. RasPiArduino框架需要超級使用者(root)許可權才能運行,而且應該設定複雜密碼進行保護。如果您已經在系統組態過程中設定了超級使用者(root)密碼,那麼可以跳過此步驟。打開Raspberry端子,並輸入以下命令

sudo su

您現在已經以超級用戶(root)用戶身份登錄。請用以下命令設定密碼

passwd

並在系統提示時再次輸入密碼進行確認。

3. 可選,但強烈建議執行此步驟。本次配置的剩餘部分都在Raspberry端子中完成。為了簡便起見,我建議大家在電腦上用SSH透過本地網路控制Raspberry端子。否則的話,您還得在桌上放置另一個鍵盤和一個顯示器,這會非常不方便。

在Raspberry上設定SSH非常簡單,只需按照以下說明操作即可:https://www.raspberrypi.org/documentation/remote-access/ssh/

SSH設定完成後,還得在電腦上下載某種SSH端子程式。我用的程式叫做MobaXterm,該端子程式對於個人使用是免費的,並且非常易於控制。它還支援SFTP(SSH 檔案傳輸通訊協定),憑藉此協議您可以透過拖放的方式將檔行動到Raspberry。透過SSH登錄時,還必須強制輸入超級使用者(root)密碼。為此,請使用以下命令:

sed -i “s/PermitRootLogin without-password/PermitRootLogin yes/” /etc/ssh/sshd_config

4. 現在,我們必須在啟動時禁用序列控制台(Serial Console)。打開文件/boot/cmdline.txt,並將其內容更改為

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

5. 接下來是用下面的命令完全禁用序列TTY:

systemctl disable serial-getty@ttyAMA0

6. 現在,我們應禁止載入內核聲音模組。為此,請使用以下命令:

sed -i “s/dtparam=audio=on/#dtparam=audio=on/” /boot/config.txt

7. 可選步驟。透過設定avahi服務,您可以直接從Arduino IDE上傳Arduino程式,就好像在為普通的Arduino研發板程式設計一樣。打開文件/etc/avahi/services/arduino.service(如果該檔不存在,請創建該檔),並將以下文本複製到其中:

<?xml version=”1.0″ standalone=’no’?><!–*-nxml-*–>
<!DOCTYPE service-group SYSTEM “avahi-service.dtd”>
<service-group>
<name replace-wildcards=”yes”>%h</name>
<service>
<type>_arduino._tcp</type>
<port>22</port>
<txt-record>board=bplus</txt-record>
</service>
</service-group>

完成後,您必須使用以下命令重新開機avahi服務:

service avahi-daemon restart
8. 安裝telnet和git。在端子程式上,執行此操作的最簡單方法就是使用包管理器。首先,請確保將包列表更新到最新版。

apt-get update

然後,安裝telnet和git。

apt-get install telnet git

9. 將RasPiArduino框架程式程式館克隆到您的Raspberry中。

git clone https://github.com/me-no-dev/RasPiArduino.git piduino

克隆完成後,將所有重要文件做成可執行檔。

chmod +x piduino/tools/arpi_bins/*

然後,將其拷到使用者目錄下。

cp piduino/tools/arpi_bins/* /usr/local/bin

我們不需要其餘的RasPiArduino框架檔程式館,因此您可以將其刪除。

rm -rf piduino

10. 現在您必須為run-avrdude腳本創建符號連結。該腳本是我們在上一步中複製並將其變成可執行檔的RasPiArduino檔之一。

ln -s /usr/local/bin/run-avrdude /usr/bin/run-avrdude

11. 可選步驟。您可以同步網路時間,並讓程式在系統啟動時開始。首先,安裝NTP(網路時間協定)實用工具。

apt-get install ntpdate

接下來,打開檔/etc/rc.local,將其內容更改為:

#!/bin/sh -e

_IP=\$(hostname -I) || true if [ “\$_IP” ]; then
printf “My IP address is %s\n” “\$_IP”

fi

# Sync Time

ntpdate-debian -u > /dev/null
# Start Sketch

/usr/local/bin/run-sketch > /dev/null

exit 0

12. 大功告成!現在,我們重啟Raspberry Pi。如果一切順利,您現在能夠用Arduino IDE連接Raspberry了。選擇正確的板卡(RaspberryPI B+/2)和正確的埠(Raspberry的本地IP位址)。

arduino code raspberry pi

圖7 Arduino IDE中的Raspberry Pi IP埠

如果按照上述步驟操作,您的Raspberry現在應該可以透過Arduino IDE進行程式設計了。對了,還有一個小細節需要講一下。Arduino功能的核心是透過各種數位和類比輸入和輸出與外界交互。Raspberry配有GPIO排針連接器,其引腳映射和功能如下圖所示。RasPiArduino Pin #(引腳編號)列中的數位與GPIO引腳編號相對應,程式中應使用該引腳編號。

arduino code raspberry pi

圖8 RasPiArduino框架中的Raspberry Pi引腳映射

請注意,Raspberry Pi只有4個引腳具有PWM輸出功能,沒有可以讀取類比電壓的引腳!此外,與大多數Arduino研發板不同,Raspberry運行在3.3V邏輯上——邏輯1對應3.3 V。Raspberry GPIO引腳無法承受5V電壓!如果直接將5V電壓外加到這些引腳上,那麼很有可能會損壞Raspberry Pi!