// 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 件のコメント:
コメントを投稿