ラズパイ3日目
今日からプログラミングも使っていきます。
内容はこちら
1.Pythonで "Hello World"
2.Lチカ
3.センサの値を読み取り
やっぱりはじめは "Hello World" でしょう。
参考にさせて頂いたサイトはこちら
西住工房さん :【Python最速入門】基本文法を一通り紹介
https://algorithm.joho.info/programming/python/example-py/
『Thonny』を開いて下記のように入力。
print("Hello World")
はい、できた!
さすがにこれは大丈夫でした。
これでPythonプログラマーとしての第一歩を踏み出しましたよ。
次はLチカ。
LEDをチカチカさせます。
Lチカのプログラムは、こちらのサイトを参考にさせて頂きました
Make.さん :GPIOでLEDの点滅(Python)
http://make.bcde.jp/raspberry-pi/gpio%E3%81%A7led%E3%81%AE%E7%82%B9%E6%BB%85python/
まずはGPIOのライブラリをインストールしないといけないようです。
下記コマンドを実行
sudo apt-get install python-rpi.gpio
私の場合、すでにインストールされているようでした。
そして、下記のプログラムを打ち込んでいきます。
コピペすればいいんだろうけど、はじめは練習も兼ねて打ち込んでみました。
入力ミスに注意。
import
RPi.GPIO as GPIO
import
time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(
11
, GPIO.OUT)
while
True
:
GPIO.output(
11
,
True
)
time.sleep(
2
)
GPIO.output(
11
,
False
)
time.sleep(
2
)
なんとなーく、ですが、やってる内容は見えますね。
11番のピンをOUTに設定して、2秒ごとにON/OFFを繰り返し。
これもできた!
ここではピン番号のところで少し引っ掛かりました。
今使っているラズパイのピン番号、改めて調べてみると下記のサイトに詳しく書いてくれていました。
https://pi4j.com/1.2/pins/model-2b-rev1.html
プログラムの記述にある「11」は、てっきりGPIOの11番かと思ったのですが、どうやら純粋に1~40までのピン番号の11番目ということだったようです。
そのあたりは、定義の「GPIO.BOARD」をつかうか、「GPIO.BCM」を使うかで変わってくるようです。
GPIO.BOARD 物理ピンの番号
GPIO.BCM GPIO番号
個人的には物理ピン番号を使ったほうがしっくりくるので、「GPIO.BOARD」で統一していこうと思います。
ここまでは割とすんなりできたのですが、データを読み取る部分では非常に苦戦しました。
まず、ラズパイはアナログ入力ができない、という点で躓きました。
センサの値はアナログ値であることが多いので、これは致命的。
A/Dコンバータを使ってデジタル値に変換しないといけないようなのですが、手元にA/Dコンバータが無い!
なので、今日のところはArduinoを使ってアナログ値を読み取り、その結果をラズパイに送ることにしました。
(はじめは、こちらの記事を参考にしてセンサの値を取得しようとしたのですが、うまくできませんでした。(おそらく私の理解不足…))
@mininobuさん :Raspberry PiとDHT11で温度・湿度を測る
https://qiita.com/mininobu/items/1ba0223af84be153b850
Arduinoを使うためには、ラズパイにArduinoの環境をインストールしないといけません。
ラズパイへのArduino環境のインストールは、こちらの記事を参考にさせて頂きました。
FabShopさん :Raspberry Piで始めるマイコンプロジェクト! Arduinoを始めよう!
https://www.fabshop.jp/arduino-pi-000/
インストールは、凄く簡単にできました。
「設定」の「Add / Remove Software」を開いて、「Arduino」と検索。
このような画面になるので、「AVR development board IDE and built-in libraries」にチェックを入れて「OK」
これで完了です。
Arduino IDE がインストールされました!
Arduinoとラズパイのプログラミングについては、こちらの記事を参考にさせていただきました。
とある科学の忘備録さん :Raspberry Pi と Arduino をUSBシリアル通信(第一弾)
https://shizenkarasuzon.hatenablog.com/entry/2019/03/04/004048
基礎からのIoT入門さん :Arduino で電圧を測る (アナログ入力を読取る)
https://iot.keicode.com/arduino/arduino-analogread.php
この2つの記事から、Arduinoで測定した電圧値をラズパイで受け取る、ということをやってみました。
◆ラズパイ側のプログラム
import serial ser = serial.Serial('/dev/ttyACM0', 115200) while True: String_data = ser.read() print(String_data) ser.close()
◆Arduino側のプログラム
const int PIN_ANALOG_INPUT = 5; void setup() { Serial.begin( 115200 ); } void loop() { int i = analogRead( PIN_ANALOG_INPUT ); float f = i * 5.0 / 1023.0; Serial.println( f ); delay( 1000 ); }
動かしてみた結果はこちらです。
電圧値が取れました!(2.15 2.17 2.16)
なぜか縦に並んでますけど、これは本当に正しく動作している結果なのか・・・?
ちなみに、ハードはこんな感じになってます。
配線図をきれいに書くソフトもあるっぽいので、そういうツールも導入していきたい。
まだサンプルプログラムをコピペしかしてないレベルですが、なんとか動くところまでたどり着きました。
先人たちの知恵には感謝しかありません・・・!
あとは、この値をcsvで書き出すなどできれば最低限の目標は達成ですね。