これは自分のためのメモです。
この備忘録を見られて真似されても結構ですが、動作の保証は出来かねます。
また、真似られたことで不測の不具合が発生しましても、私は一切の責任を負いません。
ファイルシステム領域をmicroSDカードの容量に合わせてコマンドラインで拡張する方法
$ raspi-config --expand-rootfs
参考文献
これは自分のためのメモです。
この備忘録を見られて真似されても結構ですが、動作の保証は出来かねます。
また、真似られたことで不測の不具合が発生しましても、私は一切の責任を負いません。
ファイルシステム領域をmicroSDカードの容量に合わせてコマンドラインで拡張する方法
$ raspi-config --expand-rootfs
参考文献
これは自分のためのメモです。
この備忘録を見られて真似されても結構ですが、動作の保証は出来かねます。
また、真似られたことで不測の不具合が発生しましても、私は一切の責任を負いません。
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
4oc.blogspot.com/2016/04/raspberry-pi24inch-lcd.html
bitset.jp/blog/raspi_framebuffer_1
corgi-lab.com/raspberrypi/raspberrypi-control-display/
これは自分のためのメモです。
この備忘録を見られて真似されても結構ですが、動作の保証は出来かねます。
また、真似られたことで不測の不具合が発生しましても、私は一切の責任を負いません。
# 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
これは自分のためのメモです。
この備忘録を見られて真似されても結構ですが、動作の保証は出来かねます。
また、真似られたことで不測の不具合が発生しましても、私は一切の責任を負いません。
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()
これは自分のためのメモです。
この備忘録を見られて真似されても結構ですが、動作の保証は出来かねます。
また、真似られたことで不測の不具合が発生しましても、私は一切の責任を負いません。
合ってるかな?
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 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
これは自分のためのメモです。
この備忘録を見られて真似されても結構ですが、動作の保証は出来かねます。
また、真似られたことで不測の不具合が発生しましても、私は一切の責任を負いません。
[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 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 zeroには1.3インチ OLED ディスプレイHUTがあり、pushスイッチが3つありますので、その1つをshutdonボタンに設定します。
/boot/config.txtの最後の行に追加。
dtoverlay=gpio-shutdown,gpio_pin=16,debounce=1000