カテゴリー
お知らせ

備忘録 Raspberry PI Expand Filesystem

 これは自分のためのメモです。
 この備忘録を見られて真似されても結構ですが、動作の保証は出来かねます。
 また、真似られたことで不測の不具合が発生しましても、私は一切の責任を負いません。


ファイルシステム領域をmicroSDカードの容量に合わせてコマンドラインで拡張する方法

$ raspi-config --expand-rootfs

参考文献

takeg.hatenadiary.jp/entry/2018/09/10/160126

カテゴリー
お知らせ

備忘録 Raspberry PI nonbrand 2.8inch Rpi display

 これは自分のためのメモです。
 この備忘録を見られて真似されても結構ですが、動作の保証は出来かねます。
 また、真似られたことで不測の不具合が発生しましても、私は一切の責任を負いません。


nonbrand 2.4/2.8inchi Rpi Display

waveshareと勘違いして買ったと言うのは内緒!

SKU MPI2801
LCD Type TFT
LCD Interface SPI
Driver IC ILI9341
Touch Screen Type Resistive
Touch Screen Controller XPT2046
Colors 65536
Backlight LED
Resolution 320240 (Pixel) Aspect Ratio 8:5 Active Area 43.2×57.6(mm) Dimensions 51.53×76.68(mm) Power Dissipation 0.12A5V
Rough Weight(Package containing) 44(g)

PIN NO. SYMBOL DESCRIPTION
1, 17 3.3V Power positive (3.3V power input)
2, 4 5V Power positive (5V power input)
3, 5, 7, 8, 10, 22 NC NC
6, 9, 14, 20, 25 GND Ground
11 TP_IRQ Touch Panel interrupt, low level while the Touch Panel detects touching
12 KEY1 Key
13 RST Reset ※GPIO27
15 LCD_RS LCD instruction control, Instruction/Data Register selection ※GPIO22
16 KEY2 KEY
18 KEY3 KEY
19 LCD_SI / TP_SI SPI data input of LCD/Touch Panel
21 TP_SO SPI data output of Touch Panel
23 LCD_SCK / TP_SCK SPI clock of LCD/Touch Panel
24 LCD_CS LCD chip selection, low active
26 TP_CS Touch Panel chip selection, low active

pi@raspberrypi:~$ uname -a
Linux raspberrypi 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr  3 17:24:16 BST 2023 aarch64 GNU/Linux

/boot/config.txt
enable_uart=1
dtparam=spi=on
dtoverlay=fbtft,spi0-0,ili9341,bgr,dc_pin=22,reset_pin=27,width=240,height=320,r
otate=270


pi@raspberrypi:~$ dmesg|grep spi
[    6.741665] SPI driver fb_ili9341 has no spi_device_id for ilitek,ili9341
[    6.741839] fb_ili9341 spi0.0: fbtft_property_value: width = 240
[    6.741863] fb_ili9341 spi0.0: fbtft_property_value: height = 320
[    6.741885] fb_ili9341 spi0.0: fbtft_property_value: buswidth = 8
[    6.741912] fb_ili9341 spi0.0: fbtft_property_value: rotate = 270
[    6.741932] fb_ili9341 spi0.0: fbtft_property_value: fps = 30
[    7.131162] graphics fb0: fb_ili9341 frame buffer, 320x240, 150 KiB video memory, 16 KiB buffer memory, fps=31, spi0.0 at 32 MHz

pi@raspberrypi:~$ dmesg|grep tft
[    6.689747] fbtft: module is from the staging directory, the quality is unknown, you have been warned.
[    6.741839] fb_ili9341 spi0.0: fbtft_property_value: width = 240
[    6.741863] fb_ili9341 spi0.0: fbtft_property_value: height = 320
[    6.741885] fb_ili9341 spi0.0: fbtft_property_value: buswidth = 8
[    6.741912] fb_ili9341 spi0.0: fbtft_property_value: rotate = 270
[    6.741932] fb_ili9341 spi0.0: fbtft_property_value: fps = 30

ls -la /dev/fb*


pi@raspberrypi:~$ fbset -i -fb /dev/fb0

mode "320x240"
    geometry 320 240 320 240 16
    timings 0 0 0 0 0 0 0
    nonstd 1
    rgba 5/11,6/5,5/0,0/0
endmode

Frame buffer device information:
    Name        : fb_ili9341
    Address     : 0
    Size        : 153600
    Type        : PACKED PIXELS
    Visual      : TRUECOLOR
    XPanStep    : 0
    YPanStep    : 0
    YWrapStep   : 0
    LineLength  : 640
    Accelerator : No



fbset -i -fb /dev/fb1

sudo cat /dev/zero > /dev/fb0
sudo cat /dev/urandom > /dev/fb0

参考文献

arakan60.mydns.jp/04kousaku/31-0132lcdinst.html

tomosoft.jp/design/?p=4856

4oc.blogspot.com/2016/04/raspberry-pi24inch-lcd.html

bitset.jp/blog/raspi_framebuffer_1

corgi-lab.com/raspberrypi/raspberrypi-control-display/

qiita.com/Daigorian/items/96f865ace88d02236fcd

elchika.com/article/59b3c040-8254-4ecb-b89c-604447d00330/

カテゴリー
お知らせ

備忘録 Raspberry PI ROM化

 これは自分のためのメモです。
 この備忘録を見られて真似されても結構ですが、動作の保証は出来かねます。
 また、真似られたことで不測の不具合が発生しましても、私は一切の責任を負いません。


# ROM化を有効にする
sudo raspi-config nonint enable_overlayfs
#適宜 sudo raspi-config nonint enable_bootro
sudo reboot




# ROM化を無効にする
sudo raspi-config nonint disable_overlayfs
sudo reboot
#適宜sudo raspi-config nonint disable_bootro
sudo reboot
カテゴリー
Raspberry Pi 電子工作

備忘録 1.3inch OLED HAT

 これは自分のためのメモです。
 この備忘録を見られて真似されても結構ですが、動作の保証は出来かねます。
 また、真似られたことで不測の不具合が発生しましても、私は一切の責任を負いません。


Waveshafe 1.3inch OLED HAT wiki

wikiに倣い、config.txtを修正する。

# Uncomment some or all of these to enable the optional hardware interfaces
dtparam=i2c_arm=on ← コメントアウトを外す
#dtparam=i2s=on
dtparam=spi=on ← コメントアウトを外す

check whether SPI is occupied. If the terminal outputs /dev/spidev0.1 and /dev/spidev0.1, SPI is not occupied.

$ls /dev/spi*


ライブラリーのインストール
BMC2835関係のみ必要。(wikiにあるWiringPiは不要)
ここで最新を確認する。

2023年9月22日時点で バージョン1.73

#Open the Raspberry Pi terminal and run the following command
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.73.tar.gz
tar zxvf bcm2835-1.73.tar.gz
cd bcm2835-1.73/
sudo ./configure && sudo make && sudo make check && sudo make install
# For more information, please refer to the official website: http://www.airspayce.com/mikem/bcm2835/

Pythonのライブラリーをpipインストールする
#python3
sudo apt-get update
sudo apt-get install python3-pip 
sudo pip3 install RPi.GPIO
sudo apt-get install python3-smbus
sudo pip3 install spidev

waveshare提供のサンプルプログラムをダウンロード


sudo apt-get install p7zip-full
wget https://files.waveshare.com/upload/5/53/1.3inch-OLED-HAT-Code.7z
7zr x 1.3inch-OLED-HAT-Code.7z -r -o.
sudo chmod 777 -R  RaspberryPi

サンプルプログラムの実行
cd RaspberryPi/python3/
sudo python3 main.py
sudo python3 key_demo.py

IPアドレスとCPU温度を表示させる。

sudo pip3 install ipget

test.py
#!/usr/bin/python3
# -*- coding:utf-8 -*-

import SH1106
import time
import config
import traceback
import ipget

from PIL import Image,ImageDraw,ImageFont

tempfile='/sys/class/thermal/thermal_zone0/temp'

def getTemp():
    with open(tempfile, 'r') as f:
        rdata = f.readline()
        t = float(rdata)/ 1000.0
    return  t

target_ip = ipget.ipget()
print(target_ip.ipaddr("wlan0"))
wlan_ip = target_ip.ipaddr("wlan0")

t = getTemp()
cputemp = 'cputemp=%.2f C' % (t)


try:
    disp = SH1106.SH1106()

    print("\r\r1.3inch OLED")
    # Initialize library.
    disp.Init()
    # Clear display.
    disp.clear()

    # Create blank image for drawing.
    image1 = Image.new('1', (disp.width, disp.height), "WHITE")
    draw = ImageDraw.Draw(image1)
    font = ImageFont.truetype('Font.ttf', 20)
    font10 = ImageFont.truetype('Font.ttf',13)
#    print ("***draw line")
#    draw.line([(0,0),(127,0)], fill = 0)
#    draw.line([(0,0),(0,63)], fill = 0)
#    draw.line([(0,63),(127,63)], fill = 0)
#    draw.line([(127,0),(127,63)], fill = 0)
#    print ("***draw rectangle")

    print ("***draw text")
#    draw.text((30,0), 'Waveshare ', font = font10, fill = 0)
    draw.text((0,0), wlan_ip, font = font10, fill = 0)
    draw.text((0,20), cputemp, font = font10, fill = 0)
#    draw.text((28,20), u'あいうえ ', font = font, fill = 0)

    # image1=image1.rotate(180)
    disp.ShowImage(disp.getbuffer(image1))
    time.sleep(2)

    print ("***draw image")
#    Himage2 = Image.new('1', (disp.width, disp.height), 255)  # 255: clear the frame
#    bmp = Image.open('pic.bmp')
#    Himage2.paste(bmp, (0,5))
#    # Himage2=Himage2.rotate(180)
#    disp.ShowImage(disp.getbuffer(Himage2))

except IOError as e:
    print(e)

except KeyboardInterrupt:
    print("ctrl + c:")
    epdconfig.module_exit()
    exit()

1分毎にに自動更新で表示するようにcrontab -eで編集する

@reboot sleep 20 ; sudo /usr/bin/touch /tmp/amedas ; sudo /usr/bin/chmod 660 /tmp/amedas ;
 cd /home/pi ; /usr/bin/sudo /usr/bin/python3 amedas.py
@reboot sleep 30 ; cd /home/pi/RaspberryPi/python3 ; /usr/bin/sudo /usr/bin/python3 test.py
*/10 * * * * cd /home/pi ; /usr/bin/sudo /usr/bin/python3 amedas.py
*/1 * * * * cd /home/pi/RaspberryPi/python3 ; /usr/bin/sudo /usr/bin/python3 test.py

load averageも表示されてみる

#!/usr/bin/python3
# -*- coding:utf-8 -*-

import SH1106
import time
import config
import traceback
import ipget

from PIL import Image,ImageDraw,ImageFont

tempfile='/sys/class/thermal/thermal_zone0/temp'
loadfile='/proc/loadavg'

def getTemp():
    with open(tempfile, 'r') as f:
        rdata = f.readline()
        t = float(rdata)/ 1000.0
    return  t

def getCpuload():
    with open(loadfile, 'r') as la:
        rdata = la.readline()
        la = rdata
    return  la

target_ip = ipget.ipget()
wlan_ip = target_ip.ipaddr("wlan0")

t = getTemp()
cputemp = 'cputemp=%.2f C' % (t)

la = getCpuload()
la_list = la.split()
cpuload = 'loadave=' + la_list[0] + ' ' + la_list[1] + ' ' + la_list[2]

try:
    disp = SH1106.SH1106()

    print("\r\r1.3inch OLED")
    # Initialize library.
    disp.Init()
    # Clear display.
    disp.clear()

    # Create blank image for drawing.
    image1 = Image.new('1', (disp.width, disp.height), "WHITE")
    draw = ImageDraw.Draw(image1)
    font = ImageFont.truetype('Font.ttf', 20)
    font10 = ImageFont.truetype('Font.ttf',10)

    print ("***draw text")
    draw.text((0,0), wlan_ip, font = font10, fill = 0)
    draw.text((0,15), cputemp, font = font10, fill = 0)
    draw.text((0,30), cpuload, font = font10, fill = 0)

    disp.ShowImage(disp.getbuffer(image1))
    time.sleep(2)


except IOError as e:
    print(e)

except KeyboardInterrupt:
    print("ctrl + c:")
    epdconfig.module_exit()
    exit()

何故かハマり、先人のお知恵で解決

sudo apt-get install libatlas3-base

アメダスの津地域情報を採取する。
名張では気温情報が無くてハマった。

$sudo touch /var/log/amedas
$sudo chmod 666 /var/log/amedas
 

$ cat amedas.py
#!/usr/bin/env python3
import sys
import requests

from datetime import datetime, timedelta


def get_code(name, name_type='enName'):
    area = requests.get("https://www.jma.go.jp/bosai/amedas/const/amedastable.json").json()
    for code in area:
        if area[code][name_type] == name:
            return code
    else:
        return None


def get_json(datetime_str, code):
    return requests.get(f"https://www.jma.go.jp/bosai/amedas/data/map/{datetime_str}.json").json()[code]


def get_data(code, datetime_str=None):
    if not datetime_str:
        datetime_str = datetime.now().strftime('%Y%m%d%H0000')
        try:
            data = get_json(datetime_str, code)
        except Exception:
            # try to get previous data
            datetime_str = (datetime.now() - timedelta(hours=1)).strftime('%Y%m%d%H0000')
            data = get_json(datetime_str, code)
    else:
        data = get_json(datetime_str, code)
    return data


if __name__ == '__main__':
    try:
        conf = {'area': 'Tsu', 'log': '/tmp/amedas'}
        if len(sys.argv) > 1:
            with open(sys.argv[1]) as f:
                for line in f.readlines():
                    key_value = line.rstrip().split('#')[0].split('=')
                    if len(key_value) != 2:
                        continue
                    conf[key_value[0]] = key_value[1]
        code = conf.get('code', get_code(conf['area']))
        print (code)
#        code = 53151
#        print (code)
        data = get_data(code)
        print (data)
        with open(conf['log'], 'w') as f:
            f.write(f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S')} {data['temp'][0]} {data['humidity'][0]}")
    except KeyboardInterrupt:
        pass

 $ cat RaspberryPi/python3/test.py
#!/usr/bin/python3
# -*- coding:utf-8 -*-

import SH1106
import time
import config
import traceback
import ipget

from PIL import Image,ImageDraw,ImageFont

tempfile='/sys/class/thermal/thermal_zone0/temp'
loadfile='/proc/loadavg'
amedasfile='/tmp/amedas'

def getTemp():
    with open(tempfile, 'r') as f:
        rdata = f.readline()
        t = float(rdata)/ 1000.0
    return  t

def getCpuload():
    with open(loadfile, 'r') as la:
        rdata = la.readline()
        la = rdata
    return  la

def getAmedas():
    with open(amedasfile, 'r') as la:
        rdata = la.readline()
        la = rdata
    return  la

target_ip = ipget.ipget()
wlan_ip = target_ip.ipaddr("wlan0")

t = getTemp()
cputemp = 'cputemp  %.2f C' % (t)

la = getCpuload()
la_list = la.split()
cpuload = 'loadave  ' + la_list[0] + '  ' + la_list[1] + '  ' + la_list[2]

la = getAmedas()
ame_list = la.split()
amedas = 'Mie Tsu  ' + ame_list[2] + 'C  ' + ame_list[3] + '%'

try:
    disp = SH1106.SH1106()

    print("\r\r1.3inch OLED")
    # Initialize library.
    disp.Init()
    # Clear display.
    disp.clear()

    # Create blank image for drawing.
    image1 = Image.new('1', (disp.width, disp.height), "WHITE")
    draw = ImageDraw.Draw(image1)
    font = ImageFont.truetype('Font.ttf', 20)
    font10 = ImageFont.truetype('Font.ttf',10)

    print ("***draw text")
    draw.text((0,0), wlan_ip, font = font10, fill = 0)
    draw.text((0,15), cputemp, font = font10, fill = 0)
    draw.text((0,30), cpuload, font = font10, fill = 0)
    draw.text((0,45), amedas, font = font10, fill = 0)

    disp.ShowImage(disp.getbuffer(image1))
    time.sleep(2)


except IOError as e:
    print(e)

except KeyboardInterrupt:
    print("ctrl + c:")
    epdconfig.module_exit()
    exit()
カテゴリー
Raspberry Pi 測定器 電子工作

保護中: 備忘録 Raspberry PI UNI-Tコントロール手始め

このコンテンツはパスワードで保護されています。閲覧するには以下にパスワードを入力してください。

カテゴリー
Raspberry Pi 電子工作

備忘録 pythonプログラム 対数の等間隔(logspace)

 これは自分のためのメモです。
 この備忘録を見られて真似されても結構ですが、動作の保証は出来かねます。
 また、真似られたことで不測の不具合が発生しましても、私は一切の責任を負いません。


合ってるかな?

pi@raspberrypi:~$ cat logspace_test.py
#!/usr/bin/python3

import numpy as np

print(np.logspace(1,5,num=20,endpoint=True,base=10))

pi@raspberrypi:~$ ./logspace_test.py
[1.00000000e+01 1.62377674e+01 2.63665090e+01 4.28133240e+01
 6.95192796e+01 1.12883789e+02 1.83298071e+02 2.97635144e+02
 4.83293024e+02 7.84759970e+02 1.27427499e+03 2.06913808e+03
 3.35981829e+03 5.45559478e+03 8.85866790e+03 1.43844989e+04
 2.33572147e+04 3.79269019e+04 6.15848211e+04 1.00000000e+05]
カテゴリー
Raspberry Pi 電子工作

備忘録 Raspberry PI シリアルコンソール

 これは自分のためのメモです。
 この備忘録を見られて真似されても結構ですが、動作の保証は出来かねます。
 また、真似られたことで不測の不具合が発生しましても、私は一切の責任を負いません。


[Raspberry PI zero]

/boot/config.txt
修正不要

/boot/cmdline.txt
修正不要

[Raspberry PI zero W]

/boot/config.txt 最終行へ
enable_uart=1

/boot/cmdline.txt rootwaitの後ろへ
modules-load=dwc2,g_serial

[Raspberry PI 4B]

/boot/config.txt
enable_uart=1

/boot/cmdline.txt
console=serial0,115200
カテゴリー
Raspberry Pi 測定器 電子工作

備忘録 Raspberry PI VISA&SCPI

 これは自分のためのメモです。
 この備忘録を見られて真似されても結構ですが、動作の保証は出来かねます。
 また、真似られたことで不測の不具合が発生しましても、私は一切の責任を負いません。


[pip pip3 インストール]
 

$sudo apt install pip -y


[pyvisa インストール]

※いろいろと先人のご苦労を拝見しては真似てやりましたが、バージョンによって少し違うみたいで、なかなか上手くできません。

一応、以下の方法は自分自身で3回構築しなおして再現性あるので大丈夫のはずです。

pip3 install pyvisa
pip3 install pyvisa-py

[USB関連インストール]

pip3 install pyusb

[usbデバイスのルール設定]

① usb アドレス確認
pi@raspberrypi:~$ lsusb
Bus 001 Device 005: ID 0bda:8152 Realtek Semiconductor Corp. RTL8152 Fast Ethernet Adapter
Bus 001 Device 004: ID 1ab1:044d Rigol Technologies DHO802
Bus 001 Device 003: ID 6656:0834 uni-trend UTG900E
Bus 001 Device 002: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
pi@raspberrypi:~$

※ Device 003: ID 6656:0834 uni-trend UTG900E と判明する
※ Device 004: ID 1ab1:044d Rigol Technologies DHO802 と判明する

② sudo vi /etc/udev/rules.d/99-com.rules の1行目に追加する
 先の6656:0834と1ab1:0443が重要


#UNI-T Funcrion Arvitrary Waveform Generator UTG900
SUBSYSTEMS=="usb",ACTION=="add",ATTRS{idVendor}=="6656",ATTRS{idProduct}=="0834",GROUP="usbtmc",MODE="0660"
#Rigol Technologies DHO802 Oscilloscope
SUBSYSTEMS=="usb",ACTION=="add",ATTRS{idVendor}=="1ab1",ATTRS{idProduct}=="044d",GROUP="usbtmc",MODE="0660"


③ tcbtmcの権限設定する

sudo groupadd usbtmc
sudo usermod -aG usbtmc pi

④ 必ずrebootする

sudo reboot


[]
・visaアドレス確認

pi@raspberrypi:~$ python
Python 3.7.3 (default, Jul 25 2020, 13:03:44)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyvisa as visa
>>> r = visa.ResourceManager()
>>> print(r.list_resources())
('USB0::6833::1101::DHOxxxxxxxx::0::INSTR','USB0::26198::2100::89xxxxxx::0::INSTR')



・scpiコマンド *IDN? 実行

① test.pyを作る
pi@raspberrypi:~$ vi test.py
#! /usr/bin/python3

import pyvisa as visa

awgAddr = 'USB0::26198::2100::89xxxxxxx::0::INSTR'
dsoAddr = 'USB0::6833::1101::DHOxxxxxxx::0::INSTR'

rm = visa.ResourceManager()

instr = rm.open_resource(awgAddr)
st_q = instr.query("*IDN?")
print("AWG *IDN? = " + st_q)

instr = rm.open_resource(dsoAddr)
st_q = instr.query("*IDN?")
print("dso *IDN? = " + st_q)

②実行権限を与える
pi@raspberrypi:~$ chmod +x test.py

③実行する
pi@raspberrypi:~$./test.py
awg *IDN? = UNI-T Technologies,UTG900E,89xxxxxxx,1.09
dso *IDN? = RIGOL TECHNOLOGIES,DHO802,DHOxxxxxxx,00.01.00
カテゴリー
Raspberry Pi 電子工作

備忘録 Raspberry PI OTG

 これは自分のためのメモです。
 この備忘録を見られて真似されても結構ですが、動作の保証は出来かねます。
 また、真似られたことで不測の不具合が発生しましても、私は一切の責任を負いません。


 Raspberry PI zeroはWi-FiとLANが無いため、updateできない。
 パソコンのUSB経由でパソコンのネットワークを共有するUSB OnTheGoを利用する。

 拙のUSB-HUTの構成がこのようになっており、USB-microケーブルではORG接続できないことが判明する。
 よって、何か別の手立てを考える。


/boot 配下のconfig.txt cmdline.txt 編集する

config.txt 最下行に、以下の一文を追加する。

dtoverlay=dwc2

/boot 配下のcmdline.txtのrootwait直後に以下の一文を割り込ませる。

modules-load=dwc2,g_ether
カテゴリー
Raspberry Pi 電子工作

備忘録 Raspberry PI shutdonボタン

 これは自分のためのメモです。
 この備忘録を見られて真似されても結構ですが、動作の保証は出来かねます。
 また、真似られたことで不測の不具合が発生しましても、私は一切の責任を負いません。


当方のRaspberry PI zeroには1.3インチ OLED ディスプレイHUTがあり、pushスイッチが3つありますので、その1つをshutdonボタンに設定します。

/boot/config.txtの最後の行に追加。

dtoverlay=gpio-shutdown,gpio_pin=16,debounce=1000