Linuxino meet Arduino, discussione

tuxduino: Molto interessante. Pensi potrebbe avere un senso uno shield per linuxino che in realtà sia un vero e proprio Arduino ?

Si, ho in previsione di realizzare una shield Arduino.

Mi prenoto per l'acquisto.

astrobeed: Ecco questa è una idea che mi piace, per giunta una shield con sopra aria che fa da web server, ma anche da usb host, verrebbe a costare poco di più della normale eth shield e volendo basta mettere una key WiFi per aver sia la eth che il WiFi, insomma di tutto di più a prezzi da saldi :)

Lo voglio ! tipo la wifi si potrebbe fare anche con questo ?? http://electricimp.com/

lollotek: tipo la wifi si potrebbe fare anche con questo ?? http://electricimp.com/

Sarebbe una grossa limitazione, Aria G25 è un mini pc a tutti gli effetti, gli puoi collegare una qualunque key WiFi e hai una connessione a piena velocità senza alcuna limitazione, ovviamente il dialogo con Arduino avrebbe sempre il limite della SPI, però è possibile pre elaborare tutto su Aria e passare ad Arduino solo lo stresso indispensabile, non solo è possibile avere un vero web server completo di PHP, SQL, etc, in grado di gestire n connessioni e senza limitazioni come numero e complessità delle pagine web.

Bellissimo progetto, mi permetto di dire che si potrebbe creare uno shield come ha elettronica in per rendere compatibile con arduino non credo sia cosi difficile compreso i 5 volt non sono un limite anzi, domanda stupida e se io volessi sviluppare un python?

Iz2rpn: domanda stupida e se io volessi sviluppare un python?

La disto Linux di Aria G25 ha sia il compilatore C che python residenti on board, c'è anche una libreria python che consente l'utilizzo di tutte le periferiche del processore, il che include i vari GPIO, le quattro seriali, la I2C, la SPI, l'ADC, il modulo display Daisy 24 e altre cose.

Ho messo in cantiere la realizzazione di una libreria che consentirà di utilizzare Aria G25, non importa dove è montata, come shield per Arduino con le seguenti funzionalità:
Ethernet Shield 10/100 Mbps con pieno supporto web server con php , MySql e cgi.
WiFi shield tramite key usb WiFi, può funzionare in contemporanea con l’ethernet.
Usb host shield High Speed fino a tre porte indipendenti.
Accesso alla SD di sistema per memorizzare/recuperare dati.
Possibilità di caricare diversi sketch, a seconda della necessità, su Arduino tramite Aria su richiesta di Arduino stesso o da ethernet/WiFi.
Altre funzionalità che definirò mano a mano che procede il lavoro
La connessione tra Aria G25 e Arduino sarà tramite SPI sia per la comunicazione che per riprogrammare Arduino.
Inutile dire che è un lavoro grosso per il quale sarà necessario molto tempo per completarlo, mano a mano che saranno pronte le varie funzionalità rilascerò una versione beta aggiornata della libreria.

astrobeed: Ho messo in cantiere la realizzazione di una libreria che consentirà di utilizzare Aria G25, non importa dove è montata, come shield per Arduino con le seguenti funzionalità: Ethernet Shield 10/100 Mbps con pieno supporto web server con php , MySql e cgi. WiFi shield tramite key usb WiFi, può funzionare in contemporanea con l'ethernet. Usb host shield High Speed fino a tre porte indipendenti. Accesso alla SD di sistema per memorizzare/recuperare dati. Possibilità di caricare diversi sketch, a seconda della necessità, su Arduino tramite Aria su richiesta di Arduino stesso o da ethernet/WiFi. Altre funzionalità che definirò mano a mano che procede il lavoro La connessione tra Aria G25 e Arduino sarà tramite SPI sia per la comunicazione che per riprogrammare Arduino. Inutile dire che è un lavoro grosso per il quale sarà necessario molto tempo per completarlo, mano a mano che saranno pronte le varie funzionalità rilascerò una versione beta aggiornata della libreria.

i lovvo this man. :* :*

astrobeed:

Iz2rpn: domanda stupida e se io volessi sviluppare un python?

La disto Linux di Aria G25 ha sia il compilatore C che python residenti on board, c'è anche una libreria python che consente l'utilizzo di tutte le periferiche del processore, il che include i vari GPIO, le quattro seriali, la I2C, la SPI, l'ADC, il modulo display Daisy 24 e altre cose.

e quello che volevo sentire, molto molto bene grazie

astrobeed:
Ho messo in cantiere la realizzazione di una libreria che consentirà di utilizzare Aria G25, non importa dove è montata, come shield per Arduino

Mi sa che a sto punto arduino è lo shield :wink:

Una volta che hai una board basata su Aria g25 tra le mani Arduino puoi buttarlo tranquillamente al bidone . Anzi non facciamo i maleducati, diciamo che andrebbe buttato all'isola ecologica, categoria rae raggruppamento r4 . :grin:

Non va denigrato l'Arduino. L'Arduino è utile per i principianti. L'Arduino e la G25 sono due cose differenti.

E' vero, hai perfettamente ragione. E' poi comunque è sempre meglio tenerselo l'arduino, fa sempre comodo, soprattutto la uno, una volta tolto il 328 è un ottimo convertitore seriale -> usb :grin: Scherzi a parte , la definizione di Leo è assolutamente calzante, un principiante non avrebbe la stessa flessibilità di arduino su un sistema con Aria, cosa completamente diversa invece per chi è un pò navigato, o magari è anche soltanto abituato a smanettare con linux. La varietà di linguaggi utilizzabili e le ricche funzionalità messe a disposizione dalla distribuzione dedicata a quel sistema lo rendono un ottimo 'oggetto' del desiderio,si riesce a fare veramente di tutto con poco impegno, anche semplicemente da uno script bash, e anche se a vederlo da fuori non sembra (io ero il primo ad essere scettico) potenza di calcolo ne ha da vendere! :fearful:

Diciamo che il creatore non sta facendo nulla di nuovo: https://www.olimex.com/

e io non butterei arduino nel cesso come dite voi, il bello di un micro e che è semplice e non ha fronzoli e non crescia cosi facilmente, in progetti molto complessi dove la potenza di calcolo e tutto, demanderei molto ad arduino e metterei come unità centrale un arm, avrebbe molto più logica, ma ha anche i contro che pochi dicono :) arduino io lo vedo come un ottima piattaforma per determinati progetti ma non lo uso per altri dove uso altri tipi di piattaforma, si usa quello che ci serve in base al progetto, non esiste un standard esiste solo quello che ci serve per il progetto che vogliamo realizzare, si rischia di creare una guerra religiosa con queste discussioni

Io penso che uno shield di questo tipo, assieme ad arduini, sarà molto utile a creare molte appliance per la gestione di molti sistemi. La parte Aria G25 come sistema per la parte software, arduino per gestire tutta la parte hardware e l' esterno. Mi sembra una bellissima idea... io già mi prenoto. ;)

Forse faccio una domanda a cui è già stato risposto, ma non ho trovato nulla o forse è mia ignoranza da programmatore.

Ho letto su RaspberryPi che il GPIO ha solo pin digitali e per acquisire dati analogici (come fa Arduino) bisogna o usare integrati ADC esterni o collegare in maniera particolare l'hw (trovato esempio di lettura potenziometro, resistenza/condensatore in base ai tempi di carica/scarica... etc. per me troppo difficile). La domanda: linuxino il GPIO ha pin analogici?

Mi rispondo da solo: scheda aria G25 -> 4 A/D converter @ 10 bit

Domanda da ignurantone: su Arduino mi sembra molto semplice usare la analogRead() (o la digitalRead) Supponendo di voler continuare ad utilizzare il C++, su un linuxino, avendo un Linux sotto il sedere, come si "dialoga" con il GPIO e con gli A/D ? (per non imparare un nuovo linguaggio, e secondo me proponendo un linuxino come passo successivo all'uso di Arduino) Ho letto qualcosa su RaspberryPi (molti anzi troppi esempi con python) ma non mi sembra immediato come Arduino.

nid69ita: La domanda: linuxino il GPIO ha pin analogici?

Si, ha quattro ingressi analogici con eventuale reference esterno, ci sono anche due I2C, quattro seriali (oltre a quella dedicata alla console di debug) e tante altre cose utili, tutte le periferiche sono già mappate nel kermel e direttamente disponibili con python/gcc. Un aggiornamento sullo stato produzione, tra pochi giorni arrivano i primi prototipi per testare se è tutto ok, non dovrebbero esserci problemi, dopo di che si parte con la produzione di massa. Sto aspettando di avere in mano i primi Linuxino, purtroppo siamo in ritardo sulla tabella di marcia a causa di vari intoppi, per poter iniziare a pubblicare il materiale relativo all'uso di questa scheda con Arduino e viceversa.

nid69ita:
Supponendo di voler continuare ad utilizzare il C++, su un linuxino, avendo un Linux sotto il sedere, come si “dialoga” con il GPIO e con gli A/D ?

Il C in realtà non prevede nessuna periferica di I/O, questo compito è delegato ad alcune funzioni standard di libreria che devono essere realizzate su misura per ogni hardware, nel caso di Aria con python c’è una apposita libreria che rende facilissimo l’accesso a tutte le periferiche, siamo allo stesso livello di Arduino, con il C il modo più semplice è dichiarare la periferica come un file usando la mappatura predefinita nel kernel, ovviamente le operazioni di lettura e scrittura del file abbinato alla periferica non toccano in nessun modo la flash (SD) salvo la creazione di un file con il nome abbinato alla periferica che ne contiene l’init.
Poi c’è il modo migliore in assoluto per gestire le periferiche che è lo stesso che si usa con tutti i micro quando si vuole ottenere il massimo delle prestazioni, ovvero accedere direttamente ai registri hardware delle stesse, però non è una cosa immediata dallo user space di linux dove gira il tuo programma.

Esempio pratico con il blink, led collegato al GPIO 9, su Aria:

codice python

import ablib
import time
 
print "Blinking led"
print "Type ctrl-C to exit"
 
led = ablib.Pin('W','9','low')
 
while True:
	time.sleep(0.2)
	led.on()
	time.sleep(0.2)
	led.off()

Stessa cosa in C, sembra più complicato in realtà è ugualmente semplice, in più c’è solo la parte di init che con python è gestita dalla libreria e non è direttamente visibile.

#include "stdio.h"
#include "stdlib.h"
#include "unistd.h"

int gpioexport(int gpioid) 
{
	FILE *filestream;

	if ((filestream=fopen("/sys/class/gpio/export","w"))==NULL) {
		printf("Error on export GPIO\n");
		return -1;
	}	
	fprintf(filestream,"%d",gpioid);
	fclose(filestream);
	return 0;
}

int gpiosetdir(int gpioid,char *mode) 
{
	FILE *filestream;
	char filename[50];

	sprintf(filename,"/sys/class/gpio/gpio%d/direction",gpioid);
	if ((filestream=fopen(filename,"w"))==NULL) {
		printf("Error on direction setup\n");
		return -1;
	}	
	fprintf(filestream,mode);
	fclose(filestream);
	return 0;
}

int gpiogetbits(int gpioid) 
{
	FILE *filestream;
	char filename[50];
	char retchar;

	sprintf(filename,"/sys/class/gpio/gpio%d/value",gpioid);
	if ((filestream=fopen(filename,"r"))==NULL) {
		printf("Error on gpiogetbits %d\n",gpioid);
		return -1;
	}	
	retchar=fgetc(filestream);
	fclose(filestream);
	if (retchar=='0') return 0;
	else return 1;
}

int gpiosetbits(int gpioid) 
{
	FILE *filestream;
	char filename[50];

	sprintf(filename,"/sys/class/gpio/gpio%d/value",gpioid);
	if ((filestream=fopen(filename,"w"))==NULL) {
		printf("Error on setbits %d\n",gpioid);
		return -1;
	}	
	fprintf(filestream,"1");
	fclose(filestream);
	return 0;
}

int gpioclearbits(int gpioid) 
{
	FILE *filestream;
	char filename[50];

	sprintf(filename,"/sys/class/gpio/gpio%d/value",gpioid);
	if ((filestream=fopen(filename,"w"))==NULL) {
		printf("Error on clearbits %d\n",gpioid);
		return -1;
	}	
	fprintf(filestream,"0");
	fclose(filestream);
	return 0;
}

int main(void) 
{
	int led = 82;
	
	gpioexport(led);
	gpiosetdir(led,"out");
	for (;;) {
		gpiosetbits(led);
		sleep(1);
		gpioclearbits(led);
		sleep(1);
	}
}

Non sarebbe male fare (avendo tempo) un framework, ovvero una o più librerie (come per Arduino) per semplificare da linguaggio C/C++.

Ancora una domanda: Mi piace Arduino. Mi piacerebbe poi prendere un sistema un pò più completo e pensavo a RaspberryPi, ma non mi ha convito. Ha di buono che comprando un HW hai quasi tutto (ma non input analogico!!!) Di Linuxino, non ho capito una cosa. Quello che viene dato come hw, cosa manca per un sistema completo, la aria G25 da comprare a parte? Forse sbaglio io, ma a me sul sito ufficiale non sembra chiarissimo cosa viene dato e cosa no come HW.

Io vedrei linuxino come un passaggio da un semplice Arduino ad un hw un pò più sofisticato "staccato" da Arduino. Come l'avete pensata (come la proponete)? Come un fratello maggiore di Arduino con cui dialogare per acquisizioni real-time?