Gli sketch su Intel Edison, a differenza di Arduino, non vanno in esecuzione automatica.
Per fare cio si deve creare la directory /etc/init.d ed un file sh
mkdir /etc/init.d
cd /etc/init.d
vi automatico.sh
all'interno del file automatico.sh si digita il comando exec puntado al file sketch.elf che dovra' essere stato prima spostato dalla directory /tmp a /sketch
----------------------------
#!/bin/sh
exec /sketch/sketch.elf /dev/ttyGS0 /dev/ttyGS0
----------------------------
a questo punto per l'esecuzione automatica si rende il file eseguibile
root@edison:/etc/init.d# chmod +x /etc/init.d/automatico.sh
root@edison:/etc/init.d# update-rc.d automatico.sh defaults
lo stesso si puo' fare anche con gli script Python modificando il contenuto del file /etc/init.d/automatico.sh come segue
----------------------------
#!/bin/sh
python /home/root/programma.py >> /dev/null 2>&1 &
----------------------------
mercoledì 29 giugno 2016
Modulo Radio 433 MHz HM-TRP con SIK
Volevo provare a sostituire i moduli XBee con qualcosa di piu' perfomante, piu' che altro alla ricerca di allargare il raggio di trasmissione
Su consiglio di un amico mi sono comprato i trasmettitori 433 MHz 500 mA della Drotek che dovevano essere basati sul firmware open source Sik
Si tratta di moduli radio nati per essere montati sui droni ed hanno gia' i connettori predisposti per PixHawk ma di fatto sono solo dei trasmettitori che si comportano come delle seriali virtuali
Il dispositivo e' arrivato senza nessun tipo di documentazione (CD, Libro), sul sito non ci sono riferimenti alla documentazione. Ho provato a contattare direttamente Drotek e devo ammettere che questa ditta non ha assolutamente nessuna assistenza clienti (la prossima volta compro in Cina...tanto e' uguale a parte il prezzo)
Sulla base delle poche informazioni fornite dal mio amico mi sono rimboccato le maniche ed ho cercato di prendere il controllo del dispositivo.
Connesso il trasmettitore ad una CentOs 7 via microUsb il dispositivo compare come seriale virtuale.
------------------------------------------------
Jun 29 15:31:31 localhost kernel: usb 1-1.2: new full-speed USB device number 3 using ehci-pci
Jun 29 15:31:31 localhost kernel: usb 1-1.2: New USB device found, idVendor=10c4, idProduct=ea60
Jun 29 15:31:31 localhost kernel: usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Jun 29 15:31:31 localhost kernel: usb 1-1.2: Product: CP2102 USB to UART Bridge Controller
Jun 29 15:31:31 localhost kernel: usb 1-1.2: Manufacturer: Silicon Labs
Jun 29 15:31:31 localhost kernel: usb 1-1.2: SerialNumber: 0001
Jun 29 15:31:31 localhost mtp-probe: checking bus 1, device 3: "/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2"
Jun 29 15:31:31 localhost mtp-probe: bus: 1, device: 3 was not an MTP device
Jun 29 15:31:32 localhost kernel: usbcore: registered new interface driver cp210x
Jun 29 15:31:32 localhost kernel: usbserial: USB Serial support registered for cp210x
Jun 29 15:31:32 localhost kernel: cp210x 1-1.2:1.0: cp210x converter detected
Jun 29 15:31:32 localhost kernel: usb 1-1.2: cp210x converter now attached to ttyUSB1
------------------------------------------------
a questo punto rimane il problema di programmarlo e ricevere/inviare i dati
Se si cerca il firmware Sik si attiva a questa pagina su GitHub. Nella sottocartella Firmware/Tools ci sono dei comodi script Python ed in particolare leggendo il codice del programma show_regs.py sembra quello utile a capire se il dispositivo risponde
per fare funzionare questo script si devono soddisfare le dipendenze con PySerial (pip install pyserial) e Pexpect. Per questa seconda libreria ho avuto qualche problema con pip ed ho usato l'installazione standard partendo da http://pexpect.sourceforge.net/doc/#download ed installando con python setup.py install
A questo punto digitando
[root@localhost tools]# ./show_regs.py /dev/ttyUSB1
showing registers on /dev/ttyUSB1
+++
ATI
OK
ATI5
ATI
SiK 1.9 on HM-TRP
ATI5
S0:FORMAT=25
S1:SERIAL_SPEED=57
S2:AIR_SPEED=64
S3:NETID=25
S4:TXPOWER=11
S5:ECC=1
S6:MAVLINK=1
S7:OPPRESEND=1
S8:MIN_FREQ=433050
S9:MAX_FREQ=434790
S10:NUM_CHANNELS=10
S11:DUTY_CYCLE=100
S12:LBT_RSSI=0
S13:MANCHESTER=0
S14:RTSCTS=0
S15:MAX_WINDOW=131
ATI6
ATI6
silence_period: 404
tx_window_width: 6978
max_data_packet_length: 118
ATI7
ATI7
L/R RSSI: 54/0 L/R noise: 66/0 pkts: 0 txe=0 rxe=0 stx=0 srx=0 ecc=0/0 temp=-276 dco=0
ATO
------------------------------------------------
La spiegazione dei parametri ripresa da qui e' la seguente
quindi il modulo radio utilizza effettivamente un firmware SiK e si chiama HM-TRP.
La velocita' di download di default e' 57600
A questo punto ho provato a collegare il secondo modulo via USB ma nessuna risposta (led spenti).. Dronetek non mi ha spiegato il motivo di tale configurazione (ad occhio il modulo da collegare non via Usb e' quello che si monta sul drone mentre l'altro, via Usb, e' da connettere al PC/Tablet di controllo del drone)
Ho provato allora ad alimentare il modulo tramite una Arduino ed il connettore DF13
Visto che il modulo si e' acceso ho caricato un semplice sketch di SoftwareSerial sulla Arduino per mandare una stringa ed ho messo in ascolto con Minicom (57600 8N1) il secondo modulo sulla Linux Box collegato via serial
--------------------------------------------
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
void setup()
{
mySerial.begin(57600);
}
void loop() // run over and over
{
mySerial.println("Prova trasmissione");
}
Si e' quindi acceso il led rosso se entrambi i dispositivi radio ed sono riuscito a vedere il flusso dati
Per configurare i moduli radio (per esempio per cambiare il baud rate oppure la potenza di trasmissione) si puo' utilizzare il software Mission Planner
Si seleziona la porta seriale, si seleziona Inital Setup, Sik Radio, Local., Carica Settaggi.
Una soluzione alternativa e' APM Planner
In una prova con potenza di trasmissione 11 corrispondente a 12 mW si riesce a ricevere il segnale fino ad almeno 150 m. In Italia il massimo valore di potenza ammesso per la trasmissione radio e' di 100 mW ma il trasmettitore puo' arrivare a 500 mW
Su consiglio di un amico mi sono comprato i trasmettitori 433 MHz 500 mA della Drotek che dovevano essere basati sul firmware open source Sik
Il dispositivo e' arrivato senza nessun tipo di documentazione (CD, Libro), sul sito non ci sono riferimenti alla documentazione. Ho provato a contattare direttamente Drotek e devo ammettere che questa ditta non ha assolutamente nessuna assistenza clienti (la prossima volta compro in Cina...tanto e' uguale a parte il prezzo)
Sulla base delle poche informazioni fornite dal mio amico mi sono rimboccato le maniche ed ho cercato di prendere il controllo del dispositivo.
Connesso il trasmettitore ad una CentOs 7 via microUsb il dispositivo compare come seriale virtuale.
------------------------------------------------
Jun 29 15:31:31 localhost kernel: usb 1-1.2: new full-speed USB device number 3 using ehci-pci
Jun 29 15:31:31 localhost kernel: usb 1-1.2: New USB device found, idVendor=10c4, idProduct=ea60
Jun 29 15:31:31 localhost kernel: usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Jun 29 15:31:31 localhost kernel: usb 1-1.2: Product: CP2102 USB to UART Bridge Controller
Jun 29 15:31:31 localhost kernel: usb 1-1.2: Manufacturer: Silicon Labs
Jun 29 15:31:31 localhost kernel: usb 1-1.2: SerialNumber: 0001
Jun 29 15:31:31 localhost mtp-probe: checking bus 1, device 3: "/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2"
Jun 29 15:31:31 localhost mtp-probe: bus: 1, device: 3 was not an MTP device
Jun 29 15:31:32 localhost kernel: usbcore: registered new interface driver cp210x
Jun 29 15:31:32 localhost kernel: usbserial: USB Serial support registered for cp210x
Jun 29 15:31:32 localhost kernel: cp210x 1-1.2:1.0: cp210x converter detected
Jun 29 15:31:32 localhost kernel: usb 1-1.2: cp210x converter now attached to ttyUSB1
------------------------------------------------
a questo punto rimane il problema di programmarlo e ricevere/inviare i dati
Se si cerca il firmware Sik si attiva a questa pagina su GitHub. Nella sottocartella Firmware/Tools ci sono dei comodi script Python ed in particolare leggendo il codice del programma show_regs.py sembra quello utile a capire se il dispositivo risponde
per fare funzionare questo script si devono soddisfare le dipendenze con PySerial (pip install pyserial) e Pexpect. Per questa seconda libreria ho avuto qualche problema con pip ed ho usato l'installazione standard partendo da http://pexpect.sourceforge.net/doc/#download ed installando con python setup.py install
A questo punto digitando
[root@localhost tools]# ./show_regs.py /dev/ttyUSB1
si hanno le seguenti risposte
------------------------------------------------showing registers on /dev/ttyUSB1
+++
ATI
OK
ATI5
ATI
SiK 1.9 on HM-TRP
ATI5
S0:FORMAT=25
S1:SERIAL_SPEED=57
S2:AIR_SPEED=64
S3:NETID=25
S4:TXPOWER=11
S5:ECC=1
S6:MAVLINK=1
S7:OPPRESEND=1
S8:MIN_FREQ=433050
S9:MAX_FREQ=434790
S10:NUM_CHANNELS=10
S11:DUTY_CYCLE=100
S12:LBT_RSSI=0
S13:MANCHESTER=0
S14:RTSCTS=0
S15:MAX_WINDOW=131
ATI6
ATI6
silence_period: 404
tx_window_width: 6978
max_data_packet_length: 118
ATI7
ATI7
L/R RSSI: 54/0 L/R noise: 66/0 pkts: 0 txe=0 rxe=0 stx=0 srx=0 ecc=0/0 temp=-276 dco=0
ATO
------------------------------------------------
La spiegazione dei parametri ripresa da qui e' la seguente
FORMAT
- this is for EEPROM format version. Don’t change itSERIAL_SPEED
- this is the serial speed in ‘one byte form’ (see below)AIR_SPEED
- this is the air data rate in ‘one byte form’NETID
- this is the network ID. It must be the same for both your radiosTXPOWER
- this is the transmit power in dBm. The maximum is 20dBmECC
- this enables/disables the golay error correcting codeMAVLINK
- this controls MAVLink framing and reporting. 0=no mavlink framing, 1=frame mavlink, 2=low latency mavlinkMIN_FREQ
- minimum frequency in kHzMAX_FREQ
- maximum frequency in kHzNUM_CHANNELS
- number of frequency hopping channelsDUTY_CYCLE
- the percentage of time to allow transmitLBT_RSSI
- Listen Before Talk threshold (see docs below)MAX_WINDOW
- max transmit window in msecs, 131 is the default, 33 recommended for low latency (but lower bandwidth)
Power (dBm) | Power (milliWatts) |
---|---|
1 | 1.3 |
2 | 1.6 |
5 | 3.2 |
8 | 6.3 |
11 | 12.5 |
14 | 25 |
17 | 50 |
20 | 100 |
quindi il modulo radio utilizza effettivamente un firmware SiK e si chiama HM-TRP.
La velocita' di download di default e' 57600
A questo punto ho provato a collegare il secondo modulo via USB ma nessuna risposta (led spenti).. Dronetek non mi ha spiegato il motivo di tale configurazione (ad occhio il modulo da collegare non via Usb e' quello che si monta sul drone mentre l'altro, via Usb, e' da connettere al PC/Tablet di controllo del drone)
Ho provato allora ad alimentare il modulo tramite una Arduino ed il connettore DF13
Visto che il modulo si e' acceso ho caricato un semplice sketch di SoftwareSerial sulla Arduino per mandare una stringa ed ho messo in ascolto con Minicom (57600 8N1) il secondo modulo sulla Linux Box collegato via serial
--------------------------------------------
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
void setup()
{
mySerial.begin(57600);
}
void loop() // run over and over
{
mySerial.println("Prova trasmissione");
}
--------------------------------------------
Si e' quindi acceso il led rosso se entrambi i dispositivi radio ed sono riuscito a vedere il flusso dati
Per configurare i moduli radio (per esempio per cambiare il baud rate oppure la potenza di trasmissione) si puo' utilizzare il software Mission Planner
Si seleziona la porta seriale, si seleziona Inital Setup, Sik Radio, Local., Carica Settaggi.
Una soluzione alternativa e' APM Planner
In una prova con potenza di trasmissione 11 corrispondente a 12 mW si riesce a ricevere il segnale fino ad almeno 150 m. In Italia il massimo valore di potenza ammesso per la trasmissione radio e' di 100 mW ma il trasmettitore puo' arrivare a 500 mW
lunedì 27 giugno 2016
Accedere da Arduino a Yocto su Intel Edison
Un altro sistema (dopo quello via seriale visto qui) per scambiare dati tra il lato Arduino ed il lato Edison e' quello di sfruttare il fatto che Arduino IDE espone il file system.
tramite il comando system e' possibile lanciare dei comandi sulla shell di Yocto e potendo creare file. Nel banale esempio sottostante si appende il valore 1 al file /home/root/luca.txt...forgiando la stringa in modo adeguato si possono per esempio salvare i valori letti da un sensore o le stringhe GPS
mini sketch Arduino
--------------------------
void loop()
{
system("echo '1' >> /home/root/luca.txt");
delay(1000);
}
--------------------------
E' possibile oltre che a scrivere anche leggere i file sul parte Yocto da sketch Arduino
tramite il comando system e' possibile lanciare dei comandi sulla shell di Yocto e potendo creare file. Nel banale esempio sottostante si appende il valore 1 al file /home/root/luca.txt...forgiando la stringa in modo adeguato si possono per esempio salvare i valori letti da un sensore o le stringhe GPS
mini sketch Arduino
--------------------------
void loop()
{
system("echo '1' >> /home/root/luca.txt");
delay(1000);
}
--------------------------
E' possibile oltre che a scrivere anche leggere i file sul parte Yocto da sketch Arduino
Scambio seriale tra Arduino Expansion Board e Intel Edison
Scambiare dati tra il lato Arduino (via Expansion Board) ed Intel Edison non e' immediato perche' in Yocto non sono predisposte porte seriali.(ripreso da questo link)
Per aggirare il problema si deve installare prima socat, con le istruzioni sotto indicate
----------------------------
wget http://www.dest-unreach.org/socat/download/socat-2.0.0-b8.tar.gz
Per aggirare il problema si deve installare prima socat, con le istruzioni sotto indicate
----------------------------
wget http://www.dest-unreach.org/socat/download/socat-2.0.0-b8.tar.gz
tar xvf socat-2.0.0-b8.tar.gz
cd socat-2.0.0-b8
configure
make
make install
nohup socat pty,link=$HOME/tty0,raw,echo=0 pty,link=$HOME/tty1,raw,echo=0 &
(viene generato un messaggio ma non si tratta di un errore)
Si vedra' che in /home/root/ sono comparsi di due dispositivi tty0 e tty1
Adesso si puo' caricare su Arduino IDE lo sketch sottostante che di fatto usa una seriale virtuale che punta su /home/root/tty0
----------------------------------------------
RingBuffer rx_buffer_S1;
TTYUARTClass mySerial(&rx_buffer_S1, 3, false);
void setup() {
mySerial.init_tty("/home/root/tty0");
mySerial.begin(115200);
}
void loop()
{
mySerial.write("luca");
delay(500);
}
---------------------------------------------
Per leggere i dati inviati dal lato Arduino (in questo caso una semplice stringa) e' sufficiente puntare minicom (o altro terminale seriale) su /home/root/tty1 con i parametri 115200 8N1
----------------------------
Una volta installato il programma si creano delle interfacce seriali virtualinohup socat pty,link=$HOME/tty0,raw,echo=0 pty,link=$HOME/tty1,raw,echo=0 &
(viene generato un messaggio ma non si tratta di un errore)
Si vedra' che in /home/root/ sono comparsi di due dispositivi tty0 e tty1
Adesso si puo' caricare su Arduino IDE lo sketch sottostante che di fatto usa una seriale virtuale che punta su /home/root/tty0
----------------------------------------------
RingBuffer rx_buffer_S1;
TTYUARTClass mySerial(&rx_buffer_S1, 3, false);
void setup() {
mySerial.init_tty("/home/root/tty0");
mySerial.begin(115200);
}
void loop()
{
mySerial.write("luca");
delay(500);
}
---------------------------------------------
Per leggere i dati inviati dal lato Arduino (in questo caso una semplice stringa) e' sufficiente puntare minicom (o altro terminale seriale) su /home/root/tty1 con i parametri 115200 8N1
Intel Edison e Xbee
Connettere una Intel Edison ha una rete Xbee e' piuttosto semplice ed automatico
Dopo aver montato uno shield Arduino Xbee con il relativo modulo radio (gia' programmato) si invieranno e riceveranno i dati sulla connessione seriale /dev/ttyMFD1 (che di fatto cortocircuita i pin Rx/Tx 0 ed 1 di Arduino verso Yocto)
Dopo aver montato uno shield Arduino Xbee con il relativo modulo radio (gia' programmato) si invieranno e riceveranno i dati sulla connessione seriale /dev/ttyMFD1 (che di fatto cortocircuita i pin Rx/Tx 0 ed 1 di Arduino verso Yocto)
giovedì 23 giugno 2016
Programmare Arduino Expansion Board su Intel Edison
Edison Intel non e' una vera Arduino (nel senso che non monta un microcontrollore ATMEGA328) ma ha comunque un buon grado di compatibilita' anche per gli shield Arduino
Per la programmazione dei pin Arduino si puo' utilizzare Python o C++ mediante la libreria MRAA ed UPM
Blink led con Python
-----
import mraa
led = mraa.Gpio(13)
led.dir(mraa.DIR_OUT)
led.write(1)
led.write(0)
exit()
Per la programmazione dei pin Arduino si puo' utilizzare Python o C++ mediante la libreria MRAA ed UPM
Blink led con Python
-----
import mraa
led = mraa.Gpio(13)
led.dir(mraa.DIR_OUT)
led.write(1)
led.write(0)
exit()
-----
Lettura della porta analogica 0
-----
import mraa
porta = mraa.Aio(0)
while 1:
while 1:
valore = float(pot.read())
print valore
L'Expansion Board puo' essere programmata anche tramite C/C++. Per fare cio' si usa Intel System Studio IoT Edition (sostanzialmente una versione modificata di Eclipse)
Per lanciare il programma si usa ./iss-iot-launcher
Di fatto si tratta di programmazione remota perche' il file viene compilato sul PC e poi inviato ed eseguito sulla Edison via SSH (WiFi, Ethernet-over-Usb). Si deve quindi, prima di procedere, creare una connessione con Edison
I file compilati vengono copiati sulla /tmp di Edison. Per questo motivo non saranno disponibili dopo un riavvio a meno di non copiare il file eseguibile in un'altra posizione
Blink in C++
----------------------------------------------
/*
* Author: Jessica Gomez <jessica.gomez.hernandez@intel.com>
* Copyright (c) 2015 - 2016 Intel Corporation.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "mraa.h"
#include <stdio.h>
#include <unistd.h>
/*
* On board LED blink C example
*
* Demonstrate how to blink the on board LED, writing a digital value to an
* output pin using the MRAA library.
* No external hardware is needed.
*
* - digital out: on board LED
*
* Additional linker flags: none
*/
int main()
{
// select onboard LED pin based on the platform type
// create a GPIO object from MRAA using it
mraa_platform_t platform = mraa_get_platform_type();
mraa_gpio_context d_pin = NULL;
switch (platform) {
case MRAA_INTEL_GALILEO_GEN1:
d_pin = mraa_gpio_init_raw(3);
break;
case MRAA_INTEL_GALILEO_GEN2:
d_pin = mraa_gpio_init(13);
break ;
case MRAA_INTEL_EDISON_FAB_C:
d_pin = mraa_gpio_init(13);
break;
default:
fprintf(stderr, "Unsupported platform, exiting");
return MRAA_ERROR_INVALID_PLATFORM;
}
if (d_pin == NULL) {
fprintf(stderr, "MRAA couldn't initialize GPIO, exiting");
return MRAA_ERROR_UNSPECIFIED;
}
// set the pin as output
if (mraa_gpio_dir(d_pin, MRAA_GPIO_OUT) != MRAA_SUCCESS) {
fprintf(stderr, "Can't set digital pin as output, exiting");
return MRAA_ERROR_UNSPECIFIED;
};
// loop forever toggling the on board LED every second
for (;;) {
mraa_gpio_write(d_pin, 0);
sleep(1);
mraa_gpio_write(d_pin, 1);
sleep(1);
}
return MRAA_SUCCESS;
}
-----
usando la libreria UPM sono gia' disponibili molti esempi su diversi sensori a questo indirizzo
Si puo' utilizzare anche Arduino IDE per controllare i pin. In questo caso si deve in modo preliminare configurare la scheda andando in Strumenti/Scheda/Gestore Schede installando Intel i686 Boards (Edison)
Utilizzando Arduino IDE l'upload degli sketch avviene in modo tradizionale. L'unica differenza fondamentale e' che gli sketch vengono salvati in /tmp per cui al successivo riavvio non sara' piu ' disponibile. Per ovviare a questo problema si deve procedere come
cp /tmp/nome_sketch /sketch/sketch.elf
chmod 755 /sketch.sketch.elf
usando la libreria UPM sono gia' disponibili molti esempi su diversi sensori a questo indirizzo
Si puo' utilizzare anche Arduino IDE per controllare i pin. In questo caso si deve in modo preliminare configurare la scheda andando in Strumenti/Scheda/Gestore Schede installando Intel i686 Boards (Edison)
Utilizzando Arduino IDE l'upload degli sketch avviene in modo tradizionale. L'unica differenza fondamentale e' che gli sketch vengono salvati in /tmp per cui al successivo riavvio non sara' piu ' disponibile. Per ovviare a questo problema si deve procedere come
cp /tmp/nome_sketch /sketch/sketch.elf
chmod 755 /sketch.sketch.elf
L'Expansion Board puo' essere programmata anche tramite C/C++. Per fare cio' si usa Intel System Studio IoT Edition (sostanzialmente una versione modificata di Eclipse)
Per lanciare il programma si usa ./iss-iot-launcher
Di fatto si tratta di programmazione remota perche' il file viene compilato sul PC e poi inviato ed eseguito sulla Edison via SSH (WiFi, Ethernet-over-Usb). Si deve quindi, prima di procedere, creare una connessione con Edison
I file compilati vengono copiati sulla /tmp di Edison. Per questo motivo non saranno disponibili dopo un riavvio a meno di non copiare il file eseguibile in un'altra posizione
Blink in C++
----------------------------------------------
/*
* Author: Jessica Gomez <jessica.gomez.hernandez@intel.com>
* Copyright (c) 2015 - 2016 Intel Corporation.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "mraa.h"
#include <stdio.h>
#include <unistd.h>
/*
* On board LED blink C example
*
* Demonstrate how to blink the on board LED, writing a digital value to an
* output pin using the MRAA library.
* No external hardware is needed.
*
* - digital out: on board LED
*
* Additional linker flags: none
*/
int main()
{
// select onboard LED pin based on the platform type
// create a GPIO object from MRAA using it
mraa_platform_t platform = mraa_get_platform_type();
mraa_gpio_context d_pin = NULL;
switch (platform) {
case MRAA_INTEL_GALILEO_GEN1:
d_pin = mraa_gpio_init_raw(3);
break;
case MRAA_INTEL_GALILEO_GEN2:
d_pin = mraa_gpio_init(13);
break ;
case MRAA_INTEL_EDISON_FAB_C:
d_pin = mraa_gpio_init(13);
break;
default:
fprintf(stderr, "Unsupported platform, exiting");
return MRAA_ERROR_INVALID_PLATFORM;
}
if (d_pin == NULL) {
fprintf(stderr, "MRAA couldn't initialize GPIO, exiting");
return MRAA_ERROR_UNSPECIFIED;
}
// set the pin as output
if (mraa_gpio_dir(d_pin, MRAA_GPIO_OUT) != MRAA_SUCCESS) {
fprintf(stderr, "Can't set digital pin as output, exiting");
return MRAA_ERROR_UNSPECIFIED;
};
// loop forever toggling the on board LED every second
for (;;) {
mraa_gpio_write(d_pin, 0);
sleep(1);
mraa_gpio_write(d_pin, 1);
sleep(1);
}
return MRAA_SUCCESS;
}
----------------------------------------------
Node.JS
nonostante sia possibile programmare Edison con Node:JS non sono riuscito a far funzionare XKD Iot su Centos. Si puo' comunque usare Node. direttamente da shell senza usare la programmazione remota
Blink led con Node.JS
-----
var mraa = require('mraa');
Node.JS
nonostante sia possibile programmare Edison con Node:JS non sono riuscito a far funzionare XKD Iot su Centos. Si puo' comunque usare Node. direttamente da shell senza usare la programmazione remota
Blink led con Node.JS
-----
var mraa = require('mraa');
console.log('MRAA Version: ' + mraa.getVersion());
var myOnboardLed = new mraa.Gpio(13);
myOnboardLed.dir(mraa.DIR_OUT);
-----
Lettura della porta analogica 0
-----
var mraa = require('mraa');
console.log('MRAA Version: ' + mraa.getVersion());
var analogPin0 = new mraa.Aio(0);
var analogValue = analogPin0.read();
console.log(analogValue);
-----
Ethernet-over-USB per Intel Edison su Linux
La Intel Edison oltre alla connessione della consolle via Seriale e via WiFi dispone anche della possibilita' di stabilitre una connessione TCP anche via cavo Usb con il protocollo Ethernet-over-USB (su Windows prende il nome del protocollo proprietario RNDIS)
Se si collega Edison con la porta USB-OTG e si digita sul Pc il comando
ip a
si ottiene un nuovo dispositivo che nel mio caso specifico e' enp0s26u1u1uc2.
Intel Edison ha un Ip statico sulla connessione USB (192.168.2.15). Per ottenere una connessione SSH via USB e' sufficiente impostare l'ip della connessione lato PC con
ifconfig enp0s26u1u1uc2 192.168.2.2
a questo punto si puo' lanciare la sessione ssh con
ssh root@192.168.2.15
questa configurazione puo' essere utile nel caso si voglia programmare il dispositivo utilizzando iss-iot-linux (l'ambiente di sviluppo Linux/Eclipse per Edison) senza la necessita' di attivare un access point
Se si collega Edison con la porta USB-OTG e si digita sul Pc il comando
ip a
si ottiene un nuovo dispositivo che nel mio caso specifico e' enp0s26u1u1uc2.
Intel Edison ha un Ip statico sulla connessione USB (192.168.2.15). Per ottenere una connessione SSH via USB e' sufficiente impostare l'ip della connessione lato PC con
ifconfig enp0s26u1u1uc2 192.168.2.2
a questo punto si puo' lanciare la sessione ssh con
ssh root@192.168.2.15
questa configurazione puo' essere utile nel caso si voglia programmare il dispositivo utilizzando iss-iot-linux (l'ambiente di sviluppo Linux/Eclipse per Edison) senza la necessita' di attivare un access point
Iscriviti a:
Post (Atom)
Debugger integrato ESP32S3
Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede nell'ID USB della porta Jtag. Nel modulo...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...