私的AI研究会 > RaspiPico
Raspberry Pi Pico †
新マイコンボード「Raspberry Pi Pico」を検証する。
※ 最終更新:2022/09/19
Raspberry Pi Pico を動かす †
開発環境のセットアップ †
- Raspberry Pi Picoの[BOOTSEL]ボタンを押しながらUSBケーブルをパソコンに接続すると BOOTSELモードで起動
- ディスクトップのダイアログ表示に従って「ファイルマネージャーで開く」を押す
- 「INDEX.HTM」を選択する
- 表示されたページを下にスクロールし「MicroPython」のページからMicroPythonファームウェア(UF2ファイル)をダウンロード
- ダウンロードしたMicroPythonファームウェアのUF2ファイルをPicoのRPI-RP2ドライブにコピー
これでファームウェアの書き込みは完了 Raspberry Pi Picoが自動的にリブートされる
ホスト側で Python統合開発環境「Thonny」を動かす †
- Raspberry Pi OS の場合あらかじめインストールされている Thonny IDEを利用する
- 「メニュー」→「プログラミング」→「Thonny IDE」を起動する
- Thonny IDE 右下の Pythonをクリック 表示される項目の中から「MicroPython (Raspberry Pi Pico)」を選択
エディタにサンプル・コードを記述する
import machine
import utime
led = machine.Pin(25, machine.Pin.OUT)
while True:
led.value(1)
utime.sleep(1)
led.value(0)
utime.sleep(1)
- コードを書き終えたら、メニューのRunボタンをクリック
- 保存先を聞かれるので「Raspberry Pi Pico」を選択 ファイル名を入力してOKボタンをクリック
・Raspberry Pi Picoへのプログラムの書き込みと実行が行われる
・基板上のLEDが1秒ごとに点滅すれば OK
・プログラムを停止は、Ctrl + C または Thonny IDE のメニューにある Stop ボタンを押す
LED点滅プログラム †
引用 → https://www.marutsu.co.jp/pc/static/large_order/zep/m-z-picoled-da1
- PWM機能を使用してLEDを点滅するプログラム
$ vi blink_pwm.py
from machine import Pin, PWM
import utime, random
pwm = PWM(Pin(25))
pwm.freq(100)
while True:
x = random.random()
pwm.duty_u16(int(65535*x))
utime.sleep(0.1)
print(x)
- ろうそく風ゆらぎ発光(間欠カオス発光)のプログラム
疑似的に1/fゆらぎを実現するには,「間欠カオス法」を利用する。
現在の発光強度x(t)が0.5未満かそれ以上で、次の発光強度を求める演算方法を変える。
x(t)が,完全OFF(0)や完全ON(1.0)に近づくと、発光強度の値 “x(t+1)”が変化して難くなり貼り付くためランダム関数を使って値を設定しなおす。
$ vi blink_candle.py
from machine import Pin, PWM
import utime, random
pwm = PWM(Pin(25))
pwm.freq(100)
x = 0.5
while True:
if 0.05 <= x < 0.5:
x = x + 2 * x * x
elif 0.5 <= x < 0.95:
x = x - 2 * (1 - x) * (1 - x)
else:
x = random.random()
pwm.duty_u16(int(65535*x))
utime.sleep(0.1)
print(x)
シリアル通信(UART)のテスト †
引用 → https://blog.goo.ne.jp/jh7ubc/e/e31b062f42e221c2b76eb74799c17107
- Raspberry Pi Pico は、UART0とUART1の2つのUARTコントローラを持つ
UART(id) デフォールト値
id | TX | RX | baudrate | parity | stopbit |
0 | GPIO0 | GPIO1 | 115200 | なし | 1 |
1 | GPIO4 | GPIO5 | 115200 | なし | 1 |
- ブレッドボードに回路を作成
・信号レベル変換 (3.3V → 5V) のため FT234 を使用する
・FT234 の RXを Pico の 6番ピン GP4(TX) ,TXを 7番ピンGP5(RX)に接続
・FT234の電源は 5V(VBUS) に接続
- ループバック テストプログラム (Pico 側)
$ vi uart_test.py
from machine import UART,Pin
u = UART(1)
u.write('UART test\n\r')
while True:
if u.any() > 0:
u.write(u.read(1))
- ホストPC側は「TeraTerm」を使う
・Picoからの "UART test" を受信して表示、PC のキーボードから送られた文字をそのまま送り返し受信する
・初期設定と起動時の受信バッファのクリアを追加した ループバック テストプログラム
$ vi uart_test1.py
from machine import Pin, Timer, UART
uart = UART(1, 115200, tx=Pin(4), rx=Pin(5), timeout=100)
def clear_buf():
while True:
rxData = uart.readline()
if rxData == None:
break
utime.sleep(0.005)
clear_buf()
uart.write('UART test')
while True:
rxData = uart.readline()
if rxData is not None:
print(rxData)
- UART 機能で使用可能な GPIO ピンの組み合わせ
id | TX | RX |
UART(0) | GPIO0 | GPIO1 |
GPIO12 | GPIO13 |
GPIO16 | GPIO17 |
UART(1) | GPIO4 | GPIO5 |
GPIO18 | GPIO19 |
(例) UART(1)でbaudrate, 9600bps ,TX GPIO8 ,RX GPIO9を使う場合
スクリプトの1行目に import UART,Pin
UART(1,baudrate=9600,tx=Pin(8),rx=Pin(9))
更新履歴 †
- 2022/06/23 初版
- 2022/08/18 UART通信 追加
参考資料 †
- 全般情報
- 開発環境構築
- 各種インターフェース
- 通信
- Thonny Python IDE