2026年10月19日月曜日

tinygo on pico with sht35(sh3xシリーズ)

// go get tinygo.org/x/drivers

// tinygo flash -target pico . after set boot mode at pico

package main

import (

"fmt"

"machine"

"time"

"tinygo.org/x/drivers/sht3x"

)


func main() {

// シリアル通信(USB)の準備を待つためのディレイ

time.Sleep(2 * time.Second)

fmt.Println("--- SHT3x 温湿度センサー 開始 ---")


// 1. I2Cの初期化 (Picoの標準ピン GPIO4/GPIO5 を使用)

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

Frequency: machine.TWI_FREQ_400KHZ, // 400kHz

SDA:       machine.GP4,             // Pin 6

SCL:       machine.GP5,             // Pin 7

})

if err != nil {

println("I2Cの初期化に失敗しました:", err.Error())

return

}


// 2. SHT3x ドライバーの初期化

// ※ アドレスはモジュールによって 0x44 (デフォルト) または 0x45 です。

// ※ 動かない場合は sht3x.AddressB (0x45) に変更してみてください。

sensor := sht3x.New(machine.I2C0)

sensor.Address = sht3x.AddressA // 0x44


// 3. 2秒ごとにデータを読み取って表示するループ

for {

// センサーから温度と湿度を読み取る

//(内部でSHT3xのコマンド送信、データ取得、CRCチェックが行われます)

temp, humi, err := sensor.ReadTemperatureHumidity()

if err != nil {

fmt.Println("データの読み取りに失敗しました:", err.Error())

} else {

// tinygoのドライバーは、温度を「ミリ度(1/1000℃)」、湿度を「1/100 %」で返します

// 例: 25000ミリ度 = 25.00℃

tCelsius := float64(temp) / 1000.0

hPercent := float64(humi) / 100.0

// シリアルモニターに出力

fmt.Printf("温度: %.2f °C | 湿度: %.2f %%\n", tCelsius, hPercent)

}

time.Sleep(2 * time.Second)

}

}

0 件のコメント:

コメントを投稿