Outils pour utilisateurs

Outils du site


8_-_pas_de_grovepi_comment_faire

Ceci est une ancienne révision du document !


Vous n'avez pas de GrovePi+ ?

Voici une solution avec un kit RaspBerry Pi 0 et une carte Arduino munie d'un shield Grove.

Il faut récupérer le fichier C arduino de la grove Pi et le téleverser dans l'arduino.

cd /home/pi
git clone https://github.com/DexterInd/GrovePi.git
cd GrovePi/Firmware/Source/v1.2/grove_pi_v1_2_7/

Dans ce dossier il faut copier toutes les librairies(*.cpp *.h) dans un dossier Grovepi dans votre espace perso Arduino.

Ensuite ouvrir le fichier grove_pi_v1_2_7.ino et le téleverser dans l'arduino.

Côté câblage:

Raspberry  Arduino
GPIO2(SDA) A4 (SDA)
GPIO3(SCL) A5 (SCL)
5V         Vref
GND        GND

Si votre raspberry a été paramétré pour fonctionner avec Grovepi la carte est maintenant reconnue.

i2cdetect -y 1 

Vous affichera l'adresse de la carte Arduino (0x04).

Tout le travail réalisé avec Mqtt/HomeAssistant/Freeboard/NodeRed fonctionnera tout aussi bien avec votre carte UNO.

Le code python suivant vous montre comment fonctionne le protocole avec la carte UNO en communicant au travers du port I2C. Ce programme fait clignoter la sortie 3 toutes les secondes.

import time
import smbus

bus = smbus.SMBus(1)
p_version = 3

def read_i2c_byte(address):
    for i in range(retries):
        try:
            return bus.read_byte(address)
        except IOError:
            print("IOError")
    return -1
  
  

def write_i2c_block(address,block):
    for i in range(retries):
        try:
            return bus.write_i2c_block_data(address,1,block)
        except IOError:
            print("IOError")
    return -1
def read_i2c_block(address):
    for i in range(retries):

        try:
            return bus.read_i2c_block_data(address,1)
        except IOError:
            print("IOError") 
    return -1


def digitalWrite(pin, value):
    write_i2c_block(address, dWrite_cmd + [pin, value, unused])
    return 1

def pinMode(pin, mode):
    if mode == "OUTPUT":
        write_i2c_block(address, pMode_cmd + [pin, 1, unused])
    elif mode == "INPUT":
        write_i2c_block(address, pMode_cmd + [pin, 0, unused])
    return 1

#main
retries = 10
unused = 0

dRead_cmd = [1]
dWrite_cmd = [2]
dht_temp_cmd=[40]
pMode_cmd=[5]

address = 0x04
pin=3
loop=0 


pinMode(pin, "OUTPUT")

while True:
    loop = loop + 1
    print (loop, pin, loop % 2)
    digitalWrite(pin, loop % 2) 
    time.sleep(1)

Le raspberry est la maître et l'arduino est l'esclave (adresse 0x04). Un bloc de 5 bytes est transmis pour paramètrer la carte UNO.

Le premier est fantôme Le second correspond à un ordre précis Les suivants sont les paramètres.

Exemple écriture digitale

1 - dWriteCmd ([2]) + paramètres [pin, value, unused]

Voir le fichier source arduino et le fichier python grovepi.py https://github.com/DexterInd/GrovePi/blob/master/Software/Python/grovepi.py voir également https://www.dexterindustries.com/GrovePi/programming/grovepi-protocol-adding-custom-sensors/

Si on veut ajouter des fonctionnalités, il faut donc aller charcuter le fichier C arduino, ajouter les librairies et construire les briques NodeRed pour y accéder.

8_-_pas_de_grovepi_comment_faire.1525010366.txt.gz · Dernière modification : 2020/09/26 15:15 (modification externe)