2017-10-19 12 views
0

Im essayant de lire et d'écrire des messages i2c vers/depuis le capteur Sensirion SGP30 avec Raspberry Pi 3 mais j'ai du mal à envelopper ma tête autour de smbus lib.Python smbus lib avec Sensirion SGP30

documentation SGP30 (https://cdn.sos.sk/productdata/46/c9/ba351164/sgp30.pdf) a une table qui montre hexdecimals à init et commencer à mesurer:

SGP30 commands

Et voici comment j'essaie de se lever et courir:

bus = smbus.SMBus(1) 
address = 0x58 

time.sleep(.5) 
bus.write_i2c_block_data(address, 0x2003, []) 
time.sleep(.5) 
bus.write_i2c_block_data(address, 0x2008, []) 
time.sleep(.5) 

while 1: 
    print bus.read_i2c_block_data(address, 0) 

Cette imprime moi tableau

[0, 0, 129, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] 

Mais le capteur ne réagit pas à l'alcool.

Ce dont j'ai vraiment besoin, c'est d'un tutoriel pour les mannequins sur la communication i2c et même avec smbus (python). Il semble que tous les didacticiels que j'ai vus sont ceux "juste mis ces octets ici et vous êtes bon à aller".

Alors, comment puis-je faire fonctionner ça? Je vous remercie! :)

Répondre

0

J'ai commencé à travailler.

bus = smbus.SMBus(1) 
address = 0x58 

bus.write_i2c_block_data(address, 0x20, [0x03]) 
time.sleep(.5) 

while 1: 
    bus.write_i2c_block_data(address, 0x20, [0x08]) 
    time.sleep(.6) 
    print bus.read_i2c_block_data(address, 0) 
    time.sleep(.8) 

suis passé par la documentation à nouveau et comme il est dit

commande « Measure_air_quality » doit être envoyé à intervalles réguliers de 1 s pour assurer le bon fonctionnement de l'algorithme de compensation de base dynamique .

Il semble que les temps de sommeil doivent être légèrement plus importants car la boucle ne fonctionne pas trop bien sur le Raspberry Pi.

Toujours pas trouvé une bonne explication pourquoi j'ai besoin de diviser cet octet en deux.

0

Vous ne savez pas si vous êtes conscient de cela, mais le SGP30 nécessite un VDD de + 1,8V. Le Pi i2c ne fonctionnera probablement pas correctement si vous montez les portes i2c à cette tension, ou bien, si vous alimentez le SGP30 à partir de + 3.3V, il a probablement eu une vie courte mais joyeuse et est maintenant mort. Alimentez-vous correctement le SGP30 et utilisez-vous les shifters de niveau i2c pour la communication? Sinon, les problèmes que vous mentionnez sont à prévoir.

+0

J'ai un régulateur de tension entre les deux, donc tout va bien de ce côté. Juste posté répondre comment je l'ai eu à travailler. – Sharko