2026年11月6日金曜日

池澤の日本文学全集 近現代作家3冊

近現代作家1

明治以降の作家の名品を精選し、作品の時代背景順に収める『近現代作家集』。三巻 にわたってお届けする。モダニズム、自然主義、プロレタリア

 久生十蘭「無月物語」

神西清「雪の宿り」

芥川龍之介「お富の貞操」
泉鏡花「陽炎座」
永井荷風「松葉巴」
宮本百合子「風に乗って来るコロポックル」
金子光晴「どくろ杯(抄)」
佐藤春夫「女誡扇綺譚」
横光利一「機械」
高村薫「晴子情歌(抄)」 *
堀田善衞「若き日の詩人たちの肖像(抄)」
岡本かの子「鮨」*

近現代作家2
戦中から戦後までの作品を、モダニズムの尺度から精選。

武田泰淳 汝の母を!
長谷川四郎 駐屯軍演芸大会
里見弴 いろおとこ
安岡章太郎 質屋の女房
色川武大 空襲のあと
坂口安吾 青鬼の褌を洗う女
結城昌治 終着駅(抄)
中野重治 五勺の酒
太宰治 ヴィヨンの妻*
井上ひさし 父と暮せば
井伏鱒二 白毛
吉行淳之介 鳥獣虫魚
久保田万太郎 三の酉
安部公房 誘惑者
室生犀星 鮠の子
川端康成 片腕
三島由紀夫 孔雀
上野英信 地の底の笑い話(抄)
大庭みな子 青い狐

近現代作家3
昭和から平成、「3・11」、そして宇宙へ。
日本文学の未来を切り拓く名品18篇

内田百閒 日没閉門
野呂邦暢 鳥たちの河口
幸田文 「崩れ」(抄)
富岡多惠子 動物の葬禮
村上春樹 午後の最後の芝生
鶴見俊輔 イシが伝えてくれたこと
池澤夏樹 連夜
津島佑子 鳥の涙
筒井康隆 魚籃観音記
河野多惠子 半所有者
堀江敏幸 スタンス・ドット
向井豊昭 ゴドーを尋ねながら
金井美恵子 『月』について、
稲葉真弓 桟橋
多和田葉子 雪の練習生(抄)なお全部読んだ*
川上弘美 神様/神様2011
川上未映子 三月の毛糸
円城塔 The History of the Decline and Fall of the Galactic Empire

2026年11月5日木曜日

mqtt on webmite パブリッシュは成功 サブスク挑戦

 OPTION WIFI "AP-hogehoge", "password" などと事前設定しておく!

OPTION WIFI "", "" でリセットOK

------------mqtt.bas----------------------------

Const PUB_TOPIC$ = "webmite/test/status"

’以下のcontrolをstatusにせんとサブスクできん。。。多分

Const SUB_TOPIC$ = "webmite/test/control" 

' ==================================

' 1. Wi-Fi

' ==================================


Print "Connecting to Wi-Fi..."

' SSID

WEB connect

' IP

Dim timeout = 0

Do While MM.Info(IP ADDRESS) = "0.0.0.0"

    Pause 500

    Print "."

    timeout = timeout + 1

    If timeout > 40 Then

Print "Wi-Fi connection timeout!"

        End

    EndIf

Loop


Print "Wi-Fi Connected!"

Print "IP: "; MM.Info(IP ADDRESS)


' ==================================

' 2. MQTT

' ==================================


Print "Connecting to MQTT Broker..."


WEB MQTT CONNECT "broker.hivemq.com", 1883, "", "", Mqtt_OnMessage

Pause 2000

' ==================================

' 3. Subscribe

' ==============================

Print "Subscribing..."

WEB MQTT SUBSCRIBE SUB_TOPIC$


' ==================================

' 4. Publish

' ==================================


Dim count = 0

Dim msg$ = ""

Do

    count = count + 1

    msg$ = "hello from pico2w " + Str$(count)

    Print "Publishing: "; msg$

    WEB MQTT PUBLISH PUB_TOPIC$, msg$

  Pause 3000                

Loop


' ==================================

' 5. MQTT

' ==================================


Sub Mqtt_OnMessage

  Print "--- MQTT Message Received ---"

  Print "Topic  : "; MM.ADDRESS$

  Print "Message: "; MM.MESSAGE$


'以下は永遠に実行されん。。。将来のため

  If MM.MESSAGE$ = "LED_ON" Then

        Print "LED ON"

   EndIf

  Print "-----------------------------"

End Sub                       

2026年11月2日月曜日

ArduinoESPAT on uno r3

このライブラリはArduino実用入門のESP8266ライブラリより簡便だった 

ゼロからよくわかるArduino電子工作入門 改定2版

//#include <SoftwareSerial.h>
// Rx 2 Tx 3 がArduinoESPATで決め打ちされているので
// 第一行は原本にあったが不要だった
#include "ArduinoESPAT.h"

ESPAT espat("HUAWEI@nova@lite@3+" ,"99991111");

void setup() {
Serial.begin(115200);
if (espat.begin()) {
Serial.println("Initialize OK");
} else {
Serial.println("Initialize Fail");
}

if (espat.changeMode(1)) {
Serial.println("Mode OK");
} else {
Serial.println("Mode not OK");
}

if (espat.tryConnectAP()) {
Serial.println("Connected");
} else {
Serial.println("Connect Failed");
}

Serial.println(espat.clientIP());
Serial.println(espat.get("gihyo.jp", "/", 80));
}

void loop(){
}
ーーーーーArduinoESPATライブラリのサンプルプログラムーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
#include "ArduinoESPAT.h"
ESPAT espat("HUAWEI@nova@lite@3+" ,"99991111");

void setup(){
Serial.begin(115200);

if(espat.begin()){
Serial.println("Initialize Ok");
}else{
Serial.println("Initialize Fail");
}

if(espat.changeMode(1)){
Serial.println("Mode OK");
}else{
Serial.println("Mode not OK");
}

if(espat.tryConnectAP()){
Serial.println("Connected");
}else{
Serial.println("Connect Failed");
}

Serial.println(espat.clientIP());

Serial.println(espat.get("hogehoge.com", "/", 80));
Serial.println("Finished");
}

void loop(){
}

2026年11月1日日曜日

Tinygo on raspberry pi pico with EPS01-AT,ssd1306,dht11

家のネットがあれなんでスマホのテザリングをつかった

 package main

import (

"machine"

"strconv"

"time"

)

const (

ssid     = "HUAWEInovalite3+"

password = "99991111"

)

// UARTからデータが返ってくるのを待って読み込む関数

func sendATCommand(uart *machine.UART, cmd string, timeout time.Duration) string {

println("送信:", cmd)

uart.Write([]byte(cmd + "\r\n"))

// 応答を待つ

start := time.Now()

var response []byte

buf := make([]byte, 64)

for time.Since(start) < timeout {

if uart.Buffered() > 0 {

n, _ := uart.Read(buf)

response = append(response, buf[:n]...) // 

resStr := string(response)

if hasSubstring(resStr, "OK\r\n") || hasSubstring(resStr, "ERROR\r\n") {

break

}

}

time.Sleep(10 * time.Millisecond)

}

return string(response)

}


// 簡易文字列含まれるか判定

func hasSubstring(s, sub string) bool {

if len(sub) == 0 {

return true

}

for i := 0; i <= len(s)-len(sub); i++ {

if s[i:i+len(sub)] == sub {

return true

}

}

return false

}


func main() {

time.Sleep(3 * time.Second)

println("\n--- TinyGo ESPAT Direct AT Command Control ---")

// 1. UART1の初期化 (配線: GP4=TX, GP5=RX)

uart := machine.UART1

err := uart.Configure(machine.UARTConfig{

BaudRate: 115200,

TX:       machine.GP4,

RX:       machine.GP5,

})

if err != nil {

println("UART初期化失敗")

return

}

// 2. モジュールの生存確認

println("\n[1/4] 生存確認中...")

res := sendATCommand(uart, "AT", 1*time.Second)

println("応答:\n", res)

// 3. Wi-Fiモードを「Station」に設定

println("\n[2/4] Wi-Fiモード設定中...")

res = sendATCommand(uart, "AT+CWMODE=1", 1*time.Second)

println("応答:\n", res)

// 4. アクセスポイントに接続

println("\n[3/4] Wi-Fiアクセスポイントに接続中...")

joinCmd := `AT+CWJAP="` + ssid + `","` + password + `"`

res = sendATCommand(uart, joinCmd, 10*time.Second)

println("応答:\n", res)

// 5. TCP接続を確立 (example.com)

println("\n[4/4] TCP接続テスト (example.com)...")

res = sendATCommand(uart, `AT+CIPSTART="TCP","example.com",80`, 3*time.Second)

println("応答:\n", res)

// 🚨 修正:Hostヘッダーを含んだ正しいHTTP/1.1リクエストを作成

req := "GET / HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n"

sendCmd := "AT+CIPSEND=" + strconv.Itoa(len(req))

res = sendATCommand(uart, sendCmd, 1*time.Second)

println("応答:\n", res)

// 実際のHTTPリクエストを送信

uart.Write([]byte(req))

// 🚨 修正:サーバーからの返信データを漏らさず溜める受信ループ

println("\n--- 受信データ (HTTP Response) ---")

var finalResponse []byte

readBuf := make([]byte, 128)

// データが流れ終わるまで、または3秒タイムアウトまでループ

readStart := time.Now()

for time.Since(readStart) < 3*time.Second {

if uart.Buffered() > 0 {

n, _ := uart.Read(readBuf)

finalResponse = append(finalResponse, readBuf[:n]...)

// データを受信したらタイムアウトタイマーを少し延長して追従する

readStart = time.Now() 

}

time.Sleep(20 * time.Millisecond)

}

// 取得した生データを一括表示

print(string(finalResponse))

println("\n---------------------------------")

}

-------------------------------------------------

tinygo monitor

Connected to /dev/ttyACM0. Press Ctrl-C to exit.

--- TinyGo ESPAT Direct AT Command Control ---


[1/4] 生存確認中...

送信: AT

応答:

 AT


OK



[2/4] Wi-Fiモード設定中...

送信: AT+CWMODE=1

応答:

 AT+CWMODE=1


OK



[3/4] Wi-Fiアクセスポイントに接続中...

送信: AT+CWJAP="HUAWEI@nova@lite@3+","99991111"

応答:

 AT+CWJAP="HUAWEI@nova@lite@3+","99991111"

WIFI DISCONNECT

WIFI CONNECTED

WIFI GOT IP


OK



[4/4] TCP接続テスト (example.com)...

送信: AT+CIPSTART="TCP","example.com",80

応答:

 AT+CIPSTART="TCP","example.com",80

CONNECT


OK


送信: AT+CIPSEND=56

応答:

 AT+CIPSEND=56


OK

> 


--- 受信データ (HTTP Response) ---


Recv 56 bytes


SEND OK


+IPD,927:HTTP/1.1 200 OK

Date: Sun, 01 Nov 2026 04:00:21 GMT

Content-Type: text/html; charset=utf-8

Transfer-Encoding: chunked

Connection: close

S

Age: 14269

cf-cache-status: HIT

CF-RAY: a537fdf6794fd3f5-KIX

alt-svc: h3=":443"; ma=86400


241

<!doctype html><html langh,initial-scale=1"><title>Example Domain</title><style>html{color-scheme:light dark;background:light-dark(#eee,#222)}body{font:1</head><body><p>This domain is for use in documentation examples without needing permission. This is not a service; avoid relyin


CLOSED

----------ssd1306  gpio4,gpio5でないと出ん,gpio0,gpio1はuart専用みたい!---------------------

package main

import (

"image/color"

"machine"

"time"

"tinygo.org/x/drivers/ssd1306"

"tinygo.org/x/tinyfont"

"tinygo.org/x/tinyfont/freesans"

)

func main() {

println("Starting SSD1306")

// I2C0 初期化

err := machine.I2C0.Configure(machine.I2CConfig{

SDA:       machine.GP4,

SCL:       machine.GP5,

Frequency: 100 * machine.KHz,

})

if err != nil {

println("I2C initialization failed:", err.Error())

return

}

println("I2C initialized")

// SSD1306 初期化

display := ssd1306.NewI2C(machine.I2C0)


display.Configure(ssd1306.Config{

Address: 0x3C,

Width:   128,

Height:  64,

})


println("SSD1306 initialized")


time.Sleep(time.Millisecond * 200)


// 画面クリア

display.ClearDisplay()


white := color.RGBA{

R: 255,

G: 255,

B: 255,

A: 255,

}


// 文字表示

tinyfont.WriteLine(

display,

&freesans.Regular12pt7b,

10,

25,

"Hello",

white,

)


tinyfont.WriteLine(

display,

&freesans.Regular12pt7b,

10,

50,

"TinyGo",

white,

)

// OLED更新

err = display.Display()

if err != nil {

println("Display error:", err.Error())

return

}


println("Display completed")

for {

time.Sleep(time.Second)

}

}

---------------------------------------------------------------------------------

package main

import (

"fmt"

"machine"

"time"

"tinygo.org/x/drivers/dht"

)


func main() {

// DHT11 DATA → Pico GP0

pin := machine.GP0

sensor := dht.New(pin, dht.DHT11)

for {

// 温度と湿度を同時に取得

temp, hum, err := sensor.Measurements()

if err != nil {

fmt.Printf("DHT11 Error: %v\n", err)

} else {

fmt.Printf(

"Temperature: %d.%d C, Humidity: %d.%d %%\n",

temp/10,

temp%10,

hum/10,

hum%10,

)

} // DHT11は最低でも約1秒空ける

time.Sleep(2 * time.Second)

}

}



2026年10月31日土曜日

Esp01-AT and Uno R3 ドラフト

 空スケッチをいれてuno r3にesp01をtx,rxをクロスしないで接続する

ATを入れる際に、baudrateが115200でないと接続できんのを確かめた!

ソフトシリアルを使うときは9600にする必要があるらしいが以下のサンプルコードは

115200でesp01と通信しているようだ。。。ゼロからよくわかる!Arduino電子工作 より

#include "ArduinoESPAT.h"

ESPAT espat("SSID", "PASSWD");

void setup(){
Serial.begin(115200);

if(espat.begin()){
Serial.println("Initialize Ok");
}else{
Serial.println("Initialize Fail");
}

if(espat.changeMode(1)){
Serial.println("Mode OK");
}else{
Serial.println("Mode not OK");
}

if(espat.tryConnectAP()){
Serial.println("Connected");
}else{
Serial.println("Connect Failed");
}

Serial.println(espat.clientIP());

Serial.println(espat.get("hogehoge.com", "/", 80));
Serial.println("Finished");
}

void loop(){
}

2026年10月30日金曜日

tinygo on raspicow http-clien成功

 まずserverにおりてgo run main.goでaddress with portをcheck


package main

// TinyGo Pico W HTTP Client
// Build with -scheduler=tasks

import (
    "context"
    "errors"
    "io"
    "log/slog"
    "machine"
    "net/netip"
    "time"

    "github.com/soypat/cyw43439"
    "github.com/soypat/cyw43439/examples/cywnet"
    "github.com/soypat/cyw43439/examples/cywnet/credentials"
    "github.com/soypat/lneto/http/httpraw"
    "github.com/soypat/lneto/ipv4"
    "github.com/soypat/lneto/tcp"
)

const (
    connTimeout = 5 * time.Second

    tcpbufsize = 2030

    // HTTPサーバーのIPアドレスとポート
    serverAddrStr = "192.168.0.6:8080"

    ourHostname = "tinygo-http-client"
)

// DHCPで要求するIPアドレス
var requestedIP = [4]byte{192, 168, 0, 99}

func main() {

    // USBシリアル接続待ち
    time.Sleep(2 * time.Second)

    logger := slog.New(
        slog.NewTextHandler(
            machine.Serial,
            &slog.HandlerOptions{
                Level: slog.LevelInfo,
            },
        ),
    )

    println("--- Pico W HTTP Client Start ---")

    // ========================================
    // Wi-Fi 初期化
    // ========================================

    devcfg := cyw43439.DefaultWifiConfig()
    devcfg.Logger = logger

    cystack, err := cywnet.NewConfiguredPicoWithStack(
        credentials.SSID(),
        credentials.Password(),
        devcfg,
        cywnet.StackConfig{
            Hostname:          ourHostname,
            MaxActiveTCPPorts: 1,
        },
    )

    if err != nil {
        panic("WiFi setup failed: " + err.Error())
    }

    // ========================================
    // ネットワーク処理開始
    // ========================================

    go loopForeverStack(cystack)

    // ========================================
    // DHCP
    // ========================================

    dhcpResults, err := cystack.SetupWithDHCP(
        cywnet.DHCPConfig{
            RequestedAddr: netip.AddrFrom4(requestedIP),
        },
    )

    if err != nil {
        panic("DHCP failed: " + err.Error())
    }

    logger.Info(
        "DHCP complete",
        slog.String(
            "addr",
            ipv4.String(dhcpResults.AssignedAddr4),
        ),
    )

    // ========================================
    // HTTPサーバーアドレス
    // ========================================

    serverAddr, err := netip.ParseAddrPort(serverAddrStr)

    if err != nil {
        panic("Server address error: " + err.Error())
    }

    // ========================================
    // TCPスタック
    // ========================================

    stack := cystack.StackAsync()

    rstack := stack.StackRetrying(
        cywnet.DefaultStackBackoff,
    )

    // ========================================
    // TCP接続設定
    // ========================================

    var conn tcp.Conn

    err = conn.Configure(
        tcp.ConnConfig{
            RxBuf:             make([]byte, tcpbufsize),
            TxBuf:             make([]byte, tcpbufsize),
            TxPacketQueueSize: 3,
 

 // lneto v0.4.0 では必須 ここが重要げ           

RWBackoff: cywnet.DefaultStackBackoff,
        },
    )

    if err != nil {
        panic("conn configure: " + err.Error())
    }

    // ========================================
    // HTTP GET リクエスト作成
    // ========================================

    var hdr httpraw.HeaderV1

    hdr.SetMethod("GET")

    hdr.SetRequestTarget(
        "/update?t=23&h=45",
    )

    hdr.SetProtocol("HTTP/1.1")

    hdr.Set(
        "Host",
        serverAddr.String(),
    )

    hdr.Set(
        "Connection",
        "close",
    )

    reqbytes, err := hdr.AppendRequest(nil)

    if err != nil {
        panic("HTTP request error: " + err.Error())
    }

    logger.Info(
        "http:ready",
        slog.String("serveraddr", serverAddrStr),
    )

    // ========================================
    // TCP接続・HTTP送信
    // ========================================

    rxBuf := make([]byte, 4096)

    for {

        time.Sleep(2 * time.Second)

        // ランダムなローカルポート
        localPort := uint16(stack.Prand32()>>17) + 1024

        logger.Info(
            "TCP dialing",
            slog.String("server", serverAddrStr),
        )

        // TCP接続
        err = rstack.DoDialTCP(
            context.Background(),
            &conn,
            localPort,
            serverAddr,
            connTimeout,
            3,
        )

        if err != nil {

            logger.Error(
                "TCP dial failed",
                slog.String("err", err.Error()),
            )

            closeConn(&conn)

            continue
        }

        logger.Info("TCP connected")

        // ====================================
        // HTTP GET送信
        // ====================================

        logger.Info(
            "HTTP GET sending",
            slog.String(
                "path",
                "/update?t=23&h=45",
            ),
        )

        _, err = conn.Write(reqbytes)

        if err != nil {

            logger.Error(
                "HTTP write failed",
                slog.String("err", err.Error()),
            )

            closeConn(&conn)

            continue
        }

        // 送信完了待ち
        err = conn.Flush()

        if err != nil {

            logger.Error(
                "HTTP flush failed",
                slog.String("err", err.Error()),
            )

            closeConn(&conn)

            continue
        }

        // ====================================
        // HTTPレスポンス受信
        // ====================================

        println("--- HTTP Response ---")

        _ = conn.SetReadDeadline(
            time.Now().Add(5 * time.Second),
        )

        for {

            n, readErr := conn.Read(rxBuf)

            if n > 0 {

                _, _ = machine.Serial.Write(
                    rxBuf[:n],
                )
            }

            if readErr != nil {

                if !errors.Is(readErr, io.EOF) {

                    logger.Info(
                        "HTTP read finished",
                        slog.String("err", readErr.Error()),
                    )
                }

                break
            }

            if n == 0 {
                break
            }
        }

        println("\n--- HTTP Complete ---")

        closeConn(&conn)

        // 1回送信して終了
        return
    }
}

// ============================================
// TCP接続終了処理
// ============================================

func closeConn(conn *tcp.Conn) {

    _ = conn.Close()

    for i := 0; i < 50; i++ {

        if conn.State().IsClosed() {
            break
        }

        time.Sleep(100 * time.Millisecond)
    }

    conn.Abort()
}

// ============================================
// ネットワーク処理ループ
// ============================================

func loopForeverStack(stack *cywnet.Stack) {

    for {

        send, recv, _ := stack.RecvAndSend()

        if send == 0 && recv == 0 {

            time.Sleep(5 * time.Millisecond)
        }
    }
}

2026年10月29日木曜日

CircuitPython おさらい

fseiigojp@fseigojpPC:~$  source circup-env/bin/activate

(circup-env) fseiigojp@fseigojpPC:~$ circup  adafruit_requests

Usage: circup [OPTIONS] COMMAND [ARGS]...

Try 'circup --help' for help.


Error: No such command 'adafruit_requests'.

(circup-env) fseiigojp@fseigojpPC:~$ circup install adafruit_requests

Found device raspberry_pi_pico2_w at /run/media/fseiigojp/CIRCUITPY, running CircuitPython 10.3.1.

Downloading 'py' bundle for adafruit/Adafruit_CircuitPython_Bundle (20261028).

py:

Extracting:  [####################################]  100%          


OK


Downloading '10mpy' bundle for adafruit/Adafruit_CircuitPython_Bundle (20261028).

10.x-mpy:

Extracting:  [####################################]  100%          


OK


Using latest bundle for adafruit/Adafruit_CircuitPython_Bundle (20261028).

Using latest bundle for adafruit/CircuitPython_Community_Bundle (20261008).

Searching for dependencies for: ['adafruit_requests']

Ready to install: ['adafruit_connection_manager', 'adafruit_requests']


Installed 'adafruit_connection_manager'.

Installed 'adafruit_requests'.

(circup-env) fseiigojp@fseigojpPC:~$ 

以後は同一LANでかつ2.5GHz帯であることが重要

ーーーーーーーーーーーーーーーーーーーーーーーーー

settings.toml (設定ファイル)

同じくルート(CIRCUITPY ドライブの直下)に配置してください。これがないとWi-Fiに接続できません。

CIRCUITPY_WIFI_SSID = "あなたのWi-FiのSSID"
CIRCUITPY_WIFI_PASSWORD = "あなたのWi-Fiのパスワード"

ーーーcode.pyでmonitorはthonnyをもちいるーーーーーーーーーーー

import os

import ssl

import wifi

import socketpool

import adafruit_requests

# ----------------------------------------------------

# 1. Wi-Fiへの接続

# ----------------------------------------------------

print("Wi-Fiに接続中...")

try:

    # settings.toml からWi-Fi情報を読み込んで接続

    wifi.radio.connect(

        os.getenv("CIRCUITPY_WIFI_SSID"),

        os.getenv("CIRCUITPY_WIFI_PASSWORD")

    )

    print(f"接続成功! IPアドレス: {wifi.radio.ipv4_address}")

except Exception as e:

    print(f"Wi-Fi接続エラー: {e}")

    raise

# ----------------------------------------------------

# 2. ネットワークセッションのセットアップ

# --------------httpsのみでなくhttpにもアクセスできる--------------------------------------

pool = socketpool.SocketPool(wifi.radio)

ssl_context = ssl.create_default_context()

requests = adafruit_requests.Session(pool, ssl_context)

# ----------------------------------------------------

# 3. HTTP GET リクエストの送信

# ----------------------------------------------------

# テスト用のURL(JSONデータを返すパブリックAPI)

URL = "http://192.168.0.10:3000"

print(f"GETリクエストを送信中: {URL}")

try:

    response = requests.get(URL)

    print(f"ステータスコード: {response.status_code}")

    print("-" * 40)

    # パターンA: レスポンスを「テキスト」としてそのまま表示する場合

    print("【テキストとして表示】")

    print(response.text)

    print("-" * 40)

    # パターンB: レスポンスを「JSON」として解析して特定のデータを抜く場合

    print("【JSONとして解析して表示】")

    data = response.json()

    print(f"送信元IP (origin): {data.get('origin')}")

    print(f"ユーザーエージェント (headers): {data.get('headers', {}).get('User-Agent')}")

    # 使い終わったらクローズ

    response.close()

except Exception as e:

    print(f"リクエストエラー: {e}")

print("-" * 40)

print("処理が完了しました。")

---------------circup install adarfruit_dht  --------------------------------------
import time
import board
import adafruit_dht

# ピンの定義(例: board.D17 または board.GP15 など、使用するボードに合わせて変更)
dhtDevice = adafruit_dht.DHT11(board.GP15)

while True:
    try:
        # 温度と湿度の取得
        temperature_c = dhtDevice.temperature
        humidity = dhtDevice.humidity
        
        print(f"温度: {temperature_c:.1f} ℃ / 湿度: {humidity} %")

    except RuntimeError as error:
        # DHT11の読み取りエラーは頻発するため、エラー内容は無視してリトライ
        print(f"読み取りエラー (再試行中): {error.args[0]}")
    except Exception as error:
        dhtDevice.exit()
        raise error

    # DHT11の仕様上、測定間隔は2秒以上空ける
    time.sleep(2)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
上記を組み合わせると
import os
import ssl
import time
import board
import wifi
import socketpool
import adafruit_requests
import adafruit_dht

# ----------------------------------------------------
# 1. センサーとピンの初期化
# ----------------------------------------------------
# 接続するピンに合わせて変更してください(例: board.GP15, board.D17 など)
DHT_PIN = board.GP15 
dhtDevice = adafruit_dht.DHT11(DHT_PIN)

# ----------------------------------------------------
# 2. Wi-Fiへの接続
# ----------------------------------------------------
print("Wi-Fiに接続中...")
try:
    # settings.toml からWi-Fi情報を読み込んで接続
    wifi.radio.connect(
        os.getenv("CIRCUITPY_WIFI_SSID"),
        os.getenv("CIRCUITPY_WIFI_PASSWORD")
    )
    print(f"接続成功! IPアドレス: {wifi.radio.ipv4_address}")
except Exception as e:
    print(f"Wi-Fi接続エラー: {e}")
    raise

# ----------------------------------------------------
# 3. ネットワークセッションのセットアップ
# ----------------------------------------------------
pool = socketpool.SocketPool(wifi.radio)
ssl_context = ssl.create_default_context()
requests = adafruit_requests.Session(pool, ssl_context)

# Node.js サーバーのベースURLを指定 node app.jsでurl確認!
BASE_URL = "http://192.168.0.3:3000"

# ----------------------------------------------------
# 4. メインループ(計測とクエリパラメータでの送信)
# ----------------------------------------------------
while True:
    try:
        # DHT11からデータ取得
        temperature_c = dhtDevice.temperature
        humidity = dhtDevice.humidity
        
        print(f"計測成功 -> 温度: {temperature_c:.1f} ℃ / 湿度: {humidity} %")

        # サーバーの仕様に合わせてURLを組み立て
        # 出力例: http://192.168.0
        request_url = f"{BASE_URL}/update?t={temperature_c:.1f}&h={humidity}"

        # HTTP GETリクエストの送信
        print(f"GETリクエストを送信中: {request_url}")
        response = requests.get(request_url)
        
        print(f"ステータスコード: {response.status_code}")
        print("【レスポンス】")
        print(response.text)
        
        response.close()

    except RuntimeError as error:
        # DHT11の読み取りエラーは頻発するため、スキップして次回に期待
        print(f"センサー読み取りエラー (再試行します): {error.args}")
        
    except Exception as e:
        # ネットワークエラーやその他の例外処理
        print(f"エラーが発生しました: {e}")

    print("-" * 40)
    # 次の計測・送信まで5秒待機
    time.sleep(5)