ラズパイピコを触ってみる
ハードウェア的な部分を何も確認してないので確認がてら基本的なやつだけやっておく。
開発環境のセットアップ
コジコジさんの動画を観ながらセットアップした。
550円のラズパイとPythonで始めるマイコン開発 導入~開発環境構築方法 Raspberry Pi Pico【解説】
ファームウェアの書き込みと開発環境Thonnyのインストールを何も躓くことなく完了できた。
Lチカ
YouTubeで「raspberry pi pico」って検索して、でっかい字のサムネの動画を見ながらやってみる。
【Python超入門】Raspberry Pi Picoでできること①LEDを光らせる
ファームウェアを書き込んだ後、エクスプローラーが閉じるけど、
USBを抜き差ししなくてもできた。
温度センサー
これもコジコジさんの動画を観ながらやってみた。
動画の8分あたりに出てくる公式ページが2022年7月現在のレイアウトと違って、
ドキュメントのリンクを見つけられなかったので、ここにリンクを貼っておく。
自分の理解のために各行の記述の意味をコメントで書いとく。
import machine
#なんか動かしたかったら必要らしい
import utime
#時間に関する関数たち
sensor_temp = machine.ADC(4)
#ラズパイピコのピン配置図を見ると"ADC4"ってピンはないから
#内部の温度センサーを使いたいときは引数を4にするって決まりなんだと思う。
#ピン配置図下に載せておく。
conversion_factor = 3.3 / (65535)
#3.3Vを65536分割した目盛りで測定するための係数
while True:
reading = sensor_temp.read_u16() * conversion_factor
#入ってきた電圧を65536段階で読み取って、係数をかける
temperature = 27 - (reading - 0.706)/0.001721
#後述する
print(temperature)
#ターミナルに現在の温度が表示される
utime.sleep(2)
#2秒おやすみしてループの頭に戻る
temperature = 27 – (reading – 0.706)/0.001721
この式を理解するのに5分くらいかかって悲しかったから自分のためにも式の意味書いておく(;_;)
27℃,Vbe=0.706Vを基準として、1℃変化すると±1.721mV(0.001721)変化する仕様だから、
(reading - 0.706)で読み取った電圧が基準の0.706Vからどれだけ離れてるかを計算。
電圧は1℃あたり0.001721V変化するので、さっきの値を0.001721Vで割ってあげると、何℃離れてるかが求まる。27℃にぶつけると今が何℃か求まる。
分解能が低くてあんまり使い物にならないかな。
基盤の外にLEDをつけて光らせてみる
GPIOというものに触れたことがないので、ぶっ壊れてもいい素子でいろいろ試してみる。
回路部分
回路を作成
ラズパイピコのGPIOピンからの出力電圧は3.3Vみたいなので、
470Ωの抵抗を使ってLEDに6.6mA流れるようにしてみる。
部品を配置
部品の置きやすさを考えて21番ピン(GP16)から信号を出力させて
23番ピン(GND)で接地。
ソフト部分
ポートの指定
ポートの指定は内蔵LEDでLチカしたときの記述を参考にやってみる。
Pinメソッドの引数の意味を調べた。
とりあえず第1引数と第2引数は
machine.pin(ポート番号,用途)
って感じでよさそう。
完成したコード
from machine import Pin
import utime
led = Pin(16 , Pin.OUT)
#pinメソッドの第一引数にはGPIOのポート番号を書く
#今回は21番ピンの"GP16"を使うので"16"と入力
while True:
led.toggle()
#LEDへの信号を反転
#光ってたら消すし、消えてたら光らす。
utime.sleep(1)
#1秒おやすみ
#LEDの状態は維持される
スイッチでON・OFFできるようにしてみる
回路部分
スイッチをONにしたらGP21からの信号がGP20に入って、
それをトリガーにGP16からLEDを点滅させるようにしてみる。
ソフト部分
GPIOを入力端子として使うときの記述を調べてコードを書いてみた。
from machine import Pin
import utime
led = Pin(16 , Pin.OUT)
trigger_out = Pin(21 , Pin.OUT)
trigger_in = Pin(20 , Pin.IN)
#各ピンの役割を記述
trigger_out.value(1)
#点滅モードになるトリガーの信号を常に出しておく
while True:
if(trigger_in.value() == 1):
#もしトリガーの電圧が入ってきてGP20がハイになってたら点滅モード
led.toggle()
utime.sleep(1)
else:
#GP20がローだったら消灯
led.value(0)
utime.sleep(1)
終わりに
意外とできた。
次回は買ったものを紹介していきたい。
記事を公開した通知とか進捗を見せびらかしたりするためにツイッターを開設したよ~
フォローしてね ⇒ ツイ垢
記事内で解釈間違ってることとかあったらどんどん教えてほしいので、
リプライとかで指摘頂けると幸いです。