IL BLOG DI Vincenzo Cicogna

Raspberry Pi Episodio 5: Arduino su I2C

By Vincenzo Cicogna | Gennaio 28th, 2015 | SHOW COMMENTS (2)

Benvenuti nel 5° episodio di Raspberry Pi, come ben potete immaginare, a volte è necessario espandere lahttp://www.automazioneos.com/wp-admin/post-new.php rete del sistema che si sta utilizzando per associarlo a nuovi sensori o a nuove attuazioni.

Per fare questo, nei sistemi automatici si fa uso di bus di comunicazione sui quali viaggiano informazioni relative a sensori, microcontrollori e attuatori.

Con l’esperienza di oggi si vuole costruire una comunicazione tra due schede microcontrollore: Raspberry PI ed Arduino.

In seguito è riportato il diagramma per il collegamento:

schema_bb

il codice da caricare su Raspberry Pi:

[cpp] import smbus
import time
# for RPI version 1, use "bus = smbus.SMBus(0)"
bus = smbus.SMBus(1)

# This is the address we setup in the Arduino Program
address = 0x04

def writeNumber(value):
 bus.write_byte(address, value)
 # bus.write_byte_data(address, 0, value)
return -1

def readNumber():
 number = bus.read_byte(address)
 # number = bus.read_byte_data(address, 1)
 return number

while True:
 var = input("Enter 1 – 9: ")
  if not var:
  continue

 writeNumber(var)
 print "RPI: Hi Arduino, I sent you ", var
 # sleep one second
 time.sleep(1)

 number = readNumber()
 print "Arduino: Hey RPI, I received a digit ", number
 print
[/cpp] e quello per Arduino:

[cpp] #include <Wire.h>

#define SLAVE_ADDRESS 0x04
int number = 0;
int state = 0;

void setup() {
pinMode(13, OUTPUT);
Serial.begin(9600); // start serial for output
// initialize i2c as slave
Wire.begin(SLAVE_ADDRESS);

// define callbacks for i2c communication
Wire.onReceive(receiveData);
Wire.onRequest(sendData);
Serial.println("Ready!");
}

void loop() {
delay(100);
}

// callback for received data
void receiveData(int byteCount){

while(Wire.available()) {
number = Wire.read();
Serial.print("data received: ");
Serial.println(number);

if (number == 1){

if (state == 0){
digitalWrite(13, HIGH); // set the LED on
state = 1;
}
else{
digitalWrite(13, LOW); // set the LED off
state = 0;
}
}
}
}

// callback for sending data
void sendData(){
Wire.write(number);
}

[/cpp] L’esperienza riprodotta ha avuto come fonte di ispirazione questo blog

Non perdete la prossima ed ultima puntata di Raspberry Pi!

 

 

 

Raspberry Pi episodio 4: PWM

By Vincenzo Cicogna | Settembre 23rd, 2014 | LEAVE A COMMENT

Differentemente da quanto avevamo annunciato nello scorso articolo è stato deciso di apportare delle modifiche agli argomenti intrapresi in questi video episodi sulla Raspberry PI.

Il motivo principale di questa scelta ricade sul target d’uso di questi episodi, i quali si incentreranno principalmente sull’automazione.

In effetti sin dal primo episodio lo stampo caratterizzante del progetto era prospettato su una argomentazione molto vicina all’automazione.

In questo episodio, non a caso parliamo di PWM, quindi della principale tecnica di modulazione utilizzata per l’azionamento.

Oltre al video in questo articolo potete accedere anche allo schema Fritzing e al codice Python utilizzato.

schema PWM


import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)
GPIO.setup(3, GPIO.OUT)
GPIO.setup(10, GPIO.OUT)
GPIO.setup(12, GPIO.OUT)

p = GPIO.PWM(3,50)
p.start(7.5)
try:
while True:
p.ChangeDutyCycle(7.5)
GPIO.output(10,0)
GPIO.output(12,0)
time.sleep(1)
p.ChangeDutyCycle(12.5)
GPIO.output(10,0)
GPIO.output(12,1)
time.sleep(1)
p.ChangeDutyCycle(2.5)
GPIO.output(10,1)
GPIO.output(12,0)
time.sleep(1)
except KeyboardInterrupt:
p.stop()
GPIO.cleanup()

Onde evitare ulteriori cambi di programma, in questo articolo non anticiperò nulla del prossimo episodio.

Non vi resta che non mancare al prossimo appuntamento.

Buona visione.

Alla prossima.

Episodi precedenti

Raspberry Pi episodio 3: Python e il GPIO

By Vincenzo Cicogna | Giugno 23rd, 2014 | LEAVE A COMMENT

Il terzo episodio di Raspberry Pi è incentrato completamente sul Python e sul GPIO.

Schema Breadboard

Schema Raspberry Episodio 3

In questo episodio interfacceremo la Raspberry con il mondo esterno attraverso il canale di GPIO programmando in Pythonin questo episodio interfacceremo la Raspberry con il mondo esterno attraverso il canale di GPIO programmando in Python

Per comprendere al meglio il funzionamento verranno presentati due esercizi molto semplici

  1. Esercizio classico per iniziare: hello world con un led
  2. Al classico lampeggiatore si aggiunge la possibilità di controllo con un pulsante

Gli script sono disponibili di seguito:

Pyton1.py

import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(24,GPIO.OUT)
while 1:
 GPIO.output(24,True)
 time.sleep(5)
 GPIO.output(24,False)
 time.sleep(5)

Python2.py

import RPi.GPIO as GPIO 
import time

#def main():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(23, GPIO.IN)#,pull_up_down=GPIO.PUD_DOWN) 
GPIO.setup(24, GPIO.OUT)

while True:
 input=GPIO.input(23);
 if(input == 0):
  GPIO.output(24, True)
  time.sleep(1)
  GPIO.output(24, False)
  time.sleep(1)
 #print(input)
  print("Button Pressed")
 else:
  GPIO.output(24, False)
  print(input)
# GPIO.cleanup()

Nel prossimo episodio vedremo una modalità di utilizzo molto interessante: un ottimo compromesso ai costosissimi sistemi NAS.

Ma per scoprirlo dovete aspettare la prossima puntata.

A presto

Episodi precedenti

RASPBERRY PI EPISODIO 2

By Vincenzo Cicogna | Giugno 3rd, 2014 | SHOW COMMENTS (2)

Il secondo episodio di RaspberryPI si incentra su un piccolo Get-Started per metterci in condizioni di lavorare nelle prossime puntate.

Dopo aver presentato tutto il necessario per collegare la Raspberry PI si descrive il processo di installazione del sistema operativo e del suo primo avvio. Infine è introdotto il GPIO, ed  un primo esempio di interfacciamento con il mondo esterno.

Nelle prossime puntate, come accennato anche nel video, sarà la volta di  Python e alcuni protocolli di rete con i quali verranno mostrate le enormi potenzialità di questo strumento.

Per il momento godevi il secondo episodio, iscrivetevi al nostro canale, e seguiteci sui social, è un piccolo gesto in segno di riconoscimento. 😉

Episodio 1:

http://www.xploreautomation.com/raspberry-pi-ep1/

Raspberry PI episodio 1

By Vincenzo Cicogna | Novembre 26th, 2013 | SHOW COMMENTS (5)

Non siamo scappati all’estero, o almeno non ancora. Prima di esporvi la nuova iniziativa di Automazione Os voglio scusarmi, a nome di tutto lo staff, della nostra assenza. Purtroppo il numero ridotto di autori e gli impegni che ultimamente ci hanno assalito, hanno portato ad un abbandono del blog. Vi chiediamo scusa per questa lunga attesa e vi invitiamo a tenervi sincronizzati sul sito web sempre e comunque 😉

Bando alle chiacchiere, passiamo a roba seria.

Con questo post diamo inizio ad una nuova esperienza di AoS. Dopo tanti hangout interni, decisioni sul si o sul no, se conviene o meno e se ne vale veramente la pena, siamo giunti a conclusione di lanciarci nel mondo Video, proponendo una serie di sei puntate sulla scheda Raspberry PI.

Per chi non conosce questa scheda ultimamente sta riscuotendo molto successo per creare dei piccoli sistemi Linux Embedded da utilizzare per varie applicazioni.

Dalla media station, ai web server, è una scheda che riserva delle potenzialità davvero sorprendenti. Per questo motivo abbiamo deciso di produrre sei video di circa 8 minuti nei quali faremo una prima installazione e infarinatura generale per concludere infine con un progetto vero e proprio.

Le aspettative di questa esperienza non sono “Rating o guadagni” è una prova che facciamo per constatare se il target  “videoblog” è da integrare o meno nel nostro progetto.

Premetto che l’attrezzatura per le riprese video non sono delle migliori, al momento giriamo con una compatta, se l’idea dei video vi piace e avremo dei buoni feedback, daremo la possibilità di effettuare donazioni per l’acquisto di una attrezzatura migliore e naturalmente di un servizio migliore.

Non ci resta che iniziare con Raspberry PI episodio 1.

Alla prossima

 

Credit Image: http://www.deviantart.com/morelikethis/290334314