CircuitPython 10行プログラミング Step3 (6) Wi-Fi その3 電圧測定

 前回、DMMの34461Aにソケットで通信しました。DMMの問い合わせ言語SCPIの仕様の一部を次に示します。

  Truevoldシリーズ・デジタル・マルチメータ 操作/サービスガイド

 電圧の測定。

CONFigure[:VOLTage]:{AC|DC}[{|AUTO|MIN|MAX|DEF}[, {|MIN|MAX|DEF}]]


【例】交流電圧 100Vレンジ 1mV分解能の設定
   CONF:VOLT:AC 100,0.001
   中速フィルタ(20Hz)
   s.send('VOLT:AC:BAND 20\n')

【例】直流電圧 10Vレンジ 1mV分解能の設定
   CONF:VOLT:DC 100,0.001

 直流電圧のコマンドを使って、具体的にプログラムを作ります。

電圧を表示するプログラム

 前回のプログラムに追加したのは、40~42行です。

import board
import busio
from digitalio import DigitalInOut
import adafruit_esp32spi.adafruit_esp32spi_socket as sockets
from adafruit_esp32spi import adafruit_esp32spi
import adafruit_requests as requests
import time

# If you are using a board with pre-defined ESP32 Pins:
esp32_cs = DigitalInOut(board.ESP_CS)
esp32_ready = DigitalInOut(board.ESP_BUSY)
esp32_reset = DigitalInOut(board.ESP_RESET)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)

requests.set_socket(sockets, esp)
if esp.status == adafruit_esp32spi.WL_IDLE_STATUS:
    print("ESP32 found and in idle mode")
print("Connecting to AP...")
while not esp.is_connected:
    try:
        esp.connect_AP(b'Buffalo-G-20EA', b'xxxxxxx')
    except RuntimeError as e:
        print("could not connect to AP, retrying: ",e)
        continue
print("Connected to", str(esp.ssid, 'utf-8'), "\tRSSI:", esp.rssi)
print("My IP address is", esp.pretty_ip(esp.ip_address))

ipAddr = "192.168.111.111"
ports = 5025

addr = sockets.getaddrinfo(ipAddr, ports)[0][-1]
skt = sockets.socket()
skt.connect(addr)

skt.send("*IDN?\n")
print(skt.recv(71).decode())

skt.send('CONF:VOLT:DC 10,0.001\n')
skt.send('READ?\n')
print('DC: ' + skt.recv(17).decode())

skt.close()
print("Done")

 実行結果です。DMMの測定端子には、実験用電圧源TL431の出力をつないでいます。

TFTディスプレイをつなぐ

  グラフィック・ディスプレイを使う (2) 2インチ 320x240 TFT IPSカラー・ディスプレイ

で使ったAdafruitの「2インチ 320x240 IPSカラーディスプレイ(microSDスロット付き)」を使います。

 接続は次のようになります。

TFTディスプレイ Metro M4 Express AirLift (WiFi)
Vin 3.3V
3V3  -
GND GND
SCK 6pin SCK
MISO 6pin MISO
MOSI 6pin MOSI
CS D5
RST D9
D/C D6
SDCS  -
BL  -

プログラム

 examplesに入っているst7789_320x240_simpletest.pyをMuエディタにコピペして保存します。

 実行している様子です。

 このプログラムの途中に、最初の電圧を取得するプログラムを挟み込みます。

import time
import board
import busio
from digitalio import DigitalInOut
import adafruit_esp32spi.adafruit_esp32spi_socket as sockets
from adafruit_esp32spi import adafruit_esp32spi
import adafruit_requests as requests
import displayio
import terminalio
from adafruit_display_text import label
from adafruit_st7789 import ST7789

# Release any resources currently in use for the displays
displayio.release_displays()
spi = board.SPI()
tft_cs = board.D5
tft_dc = board.D6
display_bus = displayio.FourWire(spi, command=tft_dc, chip_select=tft_cs, reset=board.D9)
display = ST7789(display_bus, width=320, height=240, rotation=90)

# Make the display context
splash = displayio.Group(max_size=10)
display.show(splash)
color_bitmap = displayio.Bitmap(320, 240, 1)
color_palette = displayio.Palette(1)
color_palette[0] = 0x00FF00 # Bright Green
bg_sprite = displayio.TileGrid(color_bitmap,
                                pixel_shader=color_palette,
                                x=0, y=0)
splash.append(bg_sprite)

# Draw a smaller inner rectangle
inner_bitmap = displayio.Bitmap(280, 200, 1)
inner_palette = displayio.Palette(1)
inner_palette[0] = 0xAA0088 # Purple
inner_sprite = displayio.TileGrid(inner_bitmap,
                                  pixel_shader=inner_palette,
                                  x=20, y=20)
splash.append(inner_sprite)

# If you are using a board with pre-defined ESP32 Pins:
esp32_cs = DigitalInOut(board.ESP_CS)
esp32_ready = DigitalInOut(board.ESP_BUSY)
esp32_reset = DigitalInOut(board.ESP_RESET)
#spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)
requests.set_socket(sockets, esp)
if esp.status == adafruit_esp32spi.WL_IDLE_STATUS:
    print("ESP32 found and in idle mode")
print("Connecting to AP...")
while not esp.is_connected:
    try:
        esp.connect_AP(b'Buffalo-G-20EA', b'abnabks7e7wfv')
    except RuntimeError as e:
        print("could not connect to AP, retrying: ",e)
        continue
print("Connected to", str(esp.ssid, 'utf-8'), "\tRSSI:", esp.rssi)
print("My IP address is", esp.pretty_ip(esp.ip_address))

ipAddr = "192.168.111.111"
ports = 5025

addr = sockets.getaddrinfo(ipAddr, ports)[0][-1]
skt = sockets.socket()
skt.connect(addr)

skt.send("*IDN?\n")
print(skt.recv(71).decode())

skt.send('CONF:VOLT:DC 10,0.001\n')
skt.send('READ?\n')
data = skt.recv(17).decode('ascii')
print('DC: ' + data)
skt.close()

text_group = displayio.Group(max_size=10, scale=3, x=27, y=120)
text = str(data)
text_area = label.Label(terminalio.FONT, text=text, color=0xFFFF00)
text_group.append(text_area) # Subgroup for text scaling
splash.append(text_group)
while True:
    pass

 実行している様子です。

(※) DMMのIPアドレスは、電源を入れて、測定が始まる直前に画面に表示されます。見逃したときは、こちらの記事を参考に探してください。

(※) 本Webのプログラム中、インデントなどのスペースもしくは改行は、通常のプログラム内ではごみ文字になるので、コピペした後、エディタでスペース文字などを入れなおしてください。