Von Türkçe mit KI übersetzt ·
Schreib das nicht selbst in Python, der Kernel hat bereits ein fertiges Software-I2C, das das Bit-Banging übernimmt und Clock Stretching korrekt überwacht. Genau deshalb habe ich den SCD30 darauf umgestellt. /boot/config.txt (bei Bookworm /boot/firmware/config.txt):
dtoverlay=i2c-gpio,bus=3,i2c_gpio_sda=23,i2c_gpio_scl=24,i2c_gpio_delay_us=2
Neu starten und mit i2cdetect -y 3 prüfen, ob 0x61 erscheint. Im Code SMBus(3) statt SMBus(1) verwenden. Den Sensor an GPIO 23/24 anschließen und einen 4,7k-Pull-up nach 3,3V setzen (die internen Pull-ups der Hardware-I2C-Pins sind hier nicht vorhanden). Falls du andere Sensoren hast, können diese auf Bus 1 bleiben.
Lies außerdem gemäß dem „Data Ready“-Befehl des Sensors (0x0202) aus; liest du, während die Messung nicht bereit ist, kommt auch hier Unsinn heraus. Tritt zwischendurch wieder ein Fehler auf, wiederhole die Leseoperation einmal und überspringe diese Ablesung; für eine übersprungene Ablesung sende nichts, in Hermetry bleibt der letzte Wert erhalten.
Python’da kendin yazma, çekirdekte zaten hazır bir yazılım I2C var, bit-bang’i o yapıyor ve clock stretching’i doğru izliyor. SCD30’u ben de tam bu yüzden ona taşıdım. /boot/config.txt (Bookworm’da /boot/firmware/config.txt):
dtoverlay=i2c-gpio,bus=3,i2c_gpio_sda=23,i2c_gpio_scl=24,i2c_gpio_delay_us=2
Yeniden başlat, i2cdetect -y 3 ile 0x61’i gör. Kodda SMBus(1) yerine SMBus(3). Sensörü GPIO 23/24’e taşı, 3.3V’a 4.7k pull-up koy (donanım I2C pinlerindeki dahili pull-up’lar burada yok). Diğer sensörlerin varsa onlar bus 1’de kalabilir.
Bir de okumayı sensörün „data ready“ komutuna (0x0202) göre yap, ölçüm hazır değilken okursan da saçmalıyor. Arada bir hata yine olursa bir kez tekrar dene, o okumayı atla; boş geçen okuma için bir şey gönderme, Hermetry’de son değer kalır.

