プログラミング Thonny Python
プログラムを作るにはGPIO(General Purpose Input Output)の知識が必要です。2021/6/20thonnyPython開始
GPIO
基盤の右側にある40ピンの端子がGPIOポートです。
1本のピンで動作するものと,複数のピンで連携して仕事をするものがあります。
電源とアースも含まれます。
UARTはパソコンと通信するときに使うシリアル通信です。RS232C
I2Cは短距離の回路内で使用する2線式のシリアル通信です。
SPIは少し距離のあるモジュール間で使われる3線式のシリアル通信です。

GPIO端子
3.3V
SDA
SCL
GPIO2
I2C
GPIO3
5V
5V
GND
GPIO4
GND
GPIO14
GPIO15
UART
TXD
RXD
GPIO17
GPIO18
GPIO27
GND
GPIO22
GPIO23
3.3V
MOSI
GPIO10
GPIO9
GND
GPIO11
SPI
MISO
SCKL
GPIO24
GND
GPIO25
GPIO8
GPIO7
HAT
ID_SD
ID_SD
HAT
GPIO5
GND
GPIO6
GPIO12
GPIO13
GND
GPIO19
GPIO26
GND
GPIO16
GPIO20
GPIO21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
8
9
7
0
2
3
1213
14
3021222324
25
15
16
1
4
5
6
10
11
31
26
27
28
29
Thonny Python
イチゴのマーク☞プログラミング☞Thonny Pythonでプログラムが開始できます。thonnyの日本語はすぐには見つかりません。多分"かわいい"??トニートニーチョッパー?
GPIO
GPIOを使うためにRPi.GPIOを使います。
GPIO.setmode(GPIO.BOARD)
pin番号で指定
GPIO.setmode(GPIO.BCM)
GPIO番号で指定
出力として使用する場合
GPIO.output(channel, GPIO.HIGH) # True , 1 も同義 GPIO.output(channel, GPIO.LOW) # False, 0 も同義
入力として使う場合
channel = 4
GPIO.setup(channel, GPIO.IN)
開放する場合
GPIO.cleanup()#すべて開放
GPIO.cleanup(channel)#channelを開放
GPIOを使うための高精度モジュール pigpio Pythonを起動する前に実行します。
sudo service pigpiod start
しばらく待つとプロンプトに戻ります。
起動時に実行するためには
sudo systemctl enable pigpiod.service
LED点滅
RPi.GPIOをGPIOとして呼びだしてPIM番号を使って出力します(GPIO.BOARD)。
import RPi.GPIO as GPIO#GPIOとしてRPi>GPIOを呼び出す
led_pin = 11#pin番号は11
GPIO.setmode(GPIO.BOARD)#GPIOはpin番号で指定する
GPIO.setup(led_pin, GPIO.OUT)#LED用IOポートは出力
GPIO.output(led_pin, True)#LED点灯
LEDは点灯し続けます。PIOを開放していないので体に悪そうです。GPIO.cleanup()を入れてもう一度実行します。LEDは消えます。
import RPi.GPIO as GPIO
led_pin = 9
GPIO.setmode(GPIO.BOARD)
GPIO.setup(led_pin, GPIO.OUT)
GPIO.output(led_pin, False)#LED消灯
GPIO.cleanup()#GPIOすべて開放
LEDチカチカ
RPi.GPIOをGPIOとして呼びだしてGPIO番号を使って出力します(GPIO.BCM)。timeは時間を扱うモジュールです。
for文を使って繰り返します。( )でくくるのではなく,インデントで内容を示します。
import RPi.GPIO as GPIO
import time#時間を扱うモジュール
led_pin = 27
GPIO.setmode(GPIO.BCM)#GPIO番号で示す
GPIO.setup(led_pin, GPIO.OUT)
for i in range(10):#インデント部分を繰り返す(10回)
GPIO.output(led_pin, True)
time.sleep(1)#1秒待機
GPIO.output(led_pin, False)
time.sleep(1)
GPIO.cleanup()
このエディタではプログラム例はインデントがスペースになっているのでこのままでは動きません。空白をすべて取ってインデントをタブにします(スペースでもOKです)。1行空いているところも,詰めてから行を空けます。
pigpio LEDchikachika
pigpioをpiとして呼びだしてGPIO番号を使って出力します。
import pigpio
import time
led_1 = 17
pi=pigpio.pi()
pi.set_mode(led_1,pigpio.OUTPUT)
for i in range(10):
pi.write(led_1,1)
time.sleep(1)
pi.write(led_1,0)
time.sleep(1)
pi.stop
2021/6/20
スイッチ入力
RPi.GPIOをGPIOとして呼びだしてGPIO番号を使って入力します(GPIO.BCM)。
while True:を使ってループにします。抜け出す命令は有りませんエディターのSTOPを使って終了します。
import RPi.GPIO as GPIO
import time
5
button_1 = 5#入力装置の名前を付ける
led_1 = 17
GPIO.setmode(GPIO.BCM)#GPIO番号で示す
GPIO.setup(button_1, GPIO.IN, pull_up_down=GPIO.PUD_UP)#GPIOを入力にする
GPIO.setup(led_1, GPIO.OUT)
while True:#右の数が0で無ければインデント部分を繰り返す
if GPIO.input(button_1):
GPIO.output(led_1, True)
if GPIO.input(button_1) == 0:
GPIO.output(led_1, False)
GPIO.cleanup()
2021/6/22
GPIO.input(button_1)というのはpull_up_down=GPIO.PUD_UP)のUP,DOWNにより押された時1,0が決まります。
ファイル書き込み
f = open('msg.txt', 'w')#新規作成,上書き
f = open('msg.txt', 'a')#新規作成,アペンド(追加)
f = open('msg.txt', 'x')#新規作成,file exists
data="abc123\n"
f.write(data)
f.writelines(['おはよう',data])
f.close()
2021/7/17
ファイルからの読み込み
f=open('msg.txt','r')
data=f.read()
f.close()
数字文字変換
int(数字・文字数字) 数字を整数にします
bin(数字) 数を2進数にします
oct(123) 数を8進数にします
hex(数字) 数を16進数にします
float(数字) 数字の文字列を浮動小数点数に変換
str() 数値を文字列に変換にします
thony python例
print(int(123))
print(int("123"))
print(bin(123))
print(oct(123))
print(hex(123))
print(int(123.456))
print(float(123.456))
print(float('123.456'))
print(str(123))
OLED
2021/6/16
128x64または128x32のLEDがパネルの中に入っている表示装置です。I2Cで動作します。
I2C
I2Cディバイスを使用するためにはRaspberryPiでI2Cをつかえるように設定します。①②どちらかの方法で行います。
①イチゴのマーク☞設定☞RaspberryPiの設定☞窓の中のインターフェースのタグでI2Cを有効のラジオボタンを押します。
②sudo raspi-config
Interfacing Options を選択
I2C を選択
Would you like the ARM I2C interface to be enabled で Yes と選択
再起動
I2Cアドレス
RaspberryPiのコマンドで sudo i2cdetect -y 1 と指示すると

OLEDの存在が表示されます。I2Cディバイスがすべて表示されます。
OLEDは128x32dotありますので,表示のためにはライブラリを使用しないと大変です。ssd1306
OLEDドライバインストール
RaspberryPiのコマンドラインで以下のコマンドを入力すると
sudo pip3 install adafruit-circuitpython-ssd1306
*(git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git)
*(cd Adafruit_Python_SSD130)
数分でインストールが行われます。OLEDのデータとドライバ
です。
OLED用フォントをインストールします。
sudo apt-get install fonts-noto-cjk
とタイプします。
その他のファイル*は必要なさそうです。
*(sudo pip3 install adafruit-blinka)
*(sudo pip3 install pillow)
*(sudo apt-get update)
*(sudo apt-get install libopenjp2-7)
*
*(sudo apt install libtiff5)
プログラム
#OLEDの表示
#拡張
import board
from PIL import Image, ImageDraw, ImageFont
import adafruit_ssd1306
#設定
i2c = board.I2C()
oled = adafruit_ssd1306.SSD1306_I2C(128, 32, i2c, addr=0x3c)
# Clear display.
oled.fill(0)
oled.show()
# Create blank image for drawing.
image = Image.new("1", (oled.width, oled.height))
draw = ImageDraw.Draw(image)
font1 = ImageFont.truetype("/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc",14)
font2 = ImageFont.truetype("/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc", 8)
#表示内容設定
draw.text((0, 0), "やあ,みなさん!", font=font1, fill=255)
draw.text((0, 18), "123ABCabc",font=font2,fill=255)
#表示
oled.image(image)
oled.show()
2021/6/24やっと動きました。
ファイルからの読み込み
#表示内容設定
f=open('msg.txt','r')
data=f.read()
f.close()
draw.text((0, 10), data, font=font2, fill=255)
/home/piにある 'msg.txt' の内容を表示します。
気圧計BMP180
2021/7/8
使用する前にI2Cのアドレスの確認をします。
更にライブラリを導入します。データ表秋月電子BOSCH参照
sudo apt-get update。。。
sudo apt-get install git build-essential python-dev python-smbus。。。
cd ~/。。。
git clone https://github.com/adafruit/Adafruit_Python_BMP.git。。。
cd Adafruit_Python_BMP。。。
sudo python3 setup.py install。。。
cd examples。。。
python3 simpletest.py。。。
なかなか動かなかったのですがPython3で実行するところが大切です。BMP085のドライバを使ってBMP180を動かしているので名前をBMP180にしたいところですが,名前を変えただけでは認識してくれません。もちろん中身も全てBMP180にしています。ドライバを作る仕組みがあるのでしょう。
センスハット
2021/7/23
RaspberryPi4の場合は
sudo nano /boot/config.txt で
hdmi_force_hotplug=1 と書きます。HDMIをつないで起動させます。その後HDMIを外してもHatの操作がVNCでできます。
sudo apt-get update
sudo apt-get install sense-hat
使用法(Python)例
from sense_hat import SenseHat
sense = SenseHat()
sense.show_message("Hello world!")
WiringPiの導入
2021/7/12
WiringPiの導入方法
pip install wiringpi
sudo apt-get install libi2c-dev (--fix-missing)
失敗した場合は( )内を追加して実行します。
sudo apt-get install git-core
確かめるためには以下のコマンドを実行します。
dpkg -l | grep wiringpi
ii wiringpi
と表示してversionを返してきます。
GPIOのコントロールがコマンドでできます。
gpio -v
これでもversion情報が得られます。
gpio -g mode 0 out
gpio -g write 0 1
gpio -g write 0 0
最新版の導入
cd ~/temp
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
ARM GCC Compiler
ARM用Cのインストール
GCC
sudo apt-get install gcc GCCのインストール














