Traduit de Türkçe par IA ·
Ne l’écris pas toi-même en Python, le noyau dispose déjà d’un I2C logiciel prêt à l’emploi qui fait le bit-banging et surveille correctement le clock stretching. C’est justement pour cette raison que j’ai migré le SCD30 vers lui. /boot/config.txt (sur Bookworm /boot/firmware/config.txt) :
dtoverlay=i2c-gpio,bus=3,i2c_gpio_sda=23,i2c_gpio_scl=24,i2c_gpio_delay_us=2
Redémarre, puis vérifie avec i2cdetect -y 3 que 0x61 apparaît. Dans le code, utilise SMBus(3) au lieu de SMBus(1). Déplace le capteur sur GPIO 23/24 et place une résistance de tirage (pull-up) de 4,7k vers 3,3V (les pull-ups internes des broches I2C matérielles ne sont pas présentes ici). Si tu as d’autres capteurs, ils peuvent rester sur le bus 1.
Fais aussi la lecture selon la commande « data ready » du capteur (0x0202) : si tu lis alors que la mesure n’est pas prête, tu obtiens également n’importe quoi. Si une erreur survient encore de temps en temps, réessaie une fois et saute cette lecture ; pour une lecture sautée, n’envoie rien, la dernière valeur reste dans Hermetry.
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.

