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 GroPi ?

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.

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)
8_-_pas_de_grovepi_comment_faire.1525009799.txt.gz · Dernière modification : 2020/09/26 15:15 (modification externe)