mercoledì 30 novembre 2016

Mqtt con Arduino e Centos 7 ed Android

Ho voluto provare ad usare il protocollo MQTT, attualmente al centro dell'attenzione per InternetOfThings.
Si tratta di un protocollo molto leggero sull'occupazione di banda per lo scambio di messaggi (applicabile anche a sistemi di chat come per esempio Facebook Messenger) con la logica sottoscrizione/pubblicazione di messaggi su un canale. I client ricevono i messaggi in modalita' push




per installare il server MQTT su Centos si procede con
yum install mosquitto

e si apre la porta 1883 del firewall per accettare connessioni dall'esterno
firewall-cmd --zone=public --add-port=1883/tcp permanent

si lancia quindi il server dalla linea di comando
mosquitto

da linea di comando per pubblicare un messaggio (dati) con l'identificativo luca/inno (dato che e' in localhost non e' necessario specificare l'indirizzo del server)
mosquitto_pub -t "luca/inno" -m "dati" -q 1 -r

su un altro terminale si puo' lanciare il comando per sottoscrivere i messaggi del server
mosquitto_sub -t "luca/inno"
e si osservano i messaggi scorrere

Si puo' utilizzare una Arduino MKR1000 (o simile con connettivita' di rete) per pubblicare i dati mediante la libreria MQTT utilizzando il seguente script (in giallo le linee di codice specifiche di MQTT)
-----------------------------------------------------------
#include <SPI.h>
#include <WiFi101.h>

#include <MQTTClient.h>


char ssid[] = "Android";     //  your network SSID (name)
char pass[] = "XXXXXXXXXXXXXX";  // your network password
int status = WL_IDLE_STATUS;     // the Wifi radio's status

WiFiClient net;
MQTTClient client;
unsigned long lastMillis = 0;



void setup() {
  Serial.begin(9600);

  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue:
    while (true);
  }
connect();

}

void connect(){
    // attempt to connect to Wifi network:
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to WPA SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network:
    status = WiFi.begin(ssid, pass);

    // wait 10 seconds for connection:
    delay(10000);
  }

  // you're connected now, so print out the data:
  Serial.print("You're connected to the network");
  printCurrentNet();
  printWifiData();

  client.begin("192.168.43.4", net);

  Serial.print("\nconnecting...");
  while (!client.connect("luca", "", "")) {
    Serial.print(".");
    delay(1000);
  }

}

void loop() {
  client.loop();

  // publish a message roughly every second.
  if(millis() - lastMillis > 1000) {
    lastMillis = millis();
    if (WiFi.status() != WL_CONNECTED)
          {
          connect();
          //printCurrentNet();
          }
     client.publish("luca/inno", "dati");
     Serial.println("Inviato");

  }
  
  
}

void printWifiData() {
  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);
  Serial.println(ip);

  // print your MAC address:
  byte mac[6];
  WiFi.macAddress(mac);
  Serial.print("MAC address: ");
  Serial.print(mac[5], HEX);
  Serial.print(":");
  Serial.print(mac[4], HEX);
  Serial.print(":");
  Serial.print(mac[3], HEX);
  Serial.print(":");
  Serial.print(mac[2], HEX);
  Serial.print(":");
  Serial.print(mac[1], HEX);
  Serial.print(":");
  Serial.println(mac[0], HEX);

}

void printCurrentNet() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print the MAC address of the router you're attached to:
  byte bssid[6];
  WiFi.BSSID(bssid);
  Serial.print("BSSID: ");
  Serial.print(bssid[5], HEX);
  Serial.print(":");
  Serial.print(bssid[4], HEX);
  Serial.print(":");
  Serial.print(bssid[3], HEX);
  Serial.print(":");
  Serial.print(bssid[2], HEX);
  Serial.print(":");
  Serial.print(bssid[1], HEX);
  Serial.print(":");
  Serial.println(bssid[0], HEX);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.println(rssi);

  // print the encryption type:
  byte encryption = WiFi.encryptionType();
  Serial.print("Encryption Type:");
  Serial.println(encryption, HEX);
  Serial.println();
}

void messageReceived(String topic, String payload, char * bytes, unsigned int length) {
}

venerdì 18 novembre 2016

Amazon Button Tear Down

E' da pochi giorni disponibile in Italia per l'acquisto l'Amazon Button, un dispositivo che permette (in pieno stile IoT) di effettuare acquisti su Amazon con la sola pressione di un tasto.
Grazie all'amico G.S. e' tempo di procedere allo smontaggio



il dispositivo e' facilmente accessibile tramite viti (TORX) e connessioni a scatto e presenta una comoda con alimentazione a batteria di tipo AAA



Quella che e' venduta in Italia risulta essere la revisione 2 della scheda che si differenzia di molto rispetto alla Rev.1 commercializzata negli USA gia' da piu' di un anno (e per la quale esistono gia' molti hack per prendere possesso del dispositivo)


Un primo aspetto importante: rispetto alla versione 1, sulla quale era possibile saldare dei connettori di programmazione per il JTAG, in questa PCB ci sono i punti di saldatura ma non e' presente il chip di programmazione ed interfaccia.
E' presente una connettivita' sia WiFi che BT4
I chip che sono montati, in particolare il microprocessore, sono di particolare interesse
Microcontrollore : Atmel ATSAMG55J19A-MU
 WiFi : Atmel ATWINC1500B
 BT : Cypress CYBL10563-68FNXI

Considerando il tipo di utilizzo il microcontrollore e' un mostro da 120 MHz con SPI, I2C, 8 canali analogici  con ADC a 12 bit

mercoledì 16 novembre 2016

50 anni dall'Alluvione di Firenze

Con qualche giorno di ritardo sull'annivesario alcune foto d'epoca sull'alluvione del 1966

Angolo del bar in Via Erbosa 93A 

Immagine attuale da una prospettiva differente


Ex negozio Coop via Erbosa 34 (L'acqua era arrivata fino a sopra il terrazzo)


Via Erbosa 87 (la finestra del primo piano e' completamente sommersa)

Via Erbosa 87 (l'acqua inizia a scendere)





lunedì 14 novembre 2016

Autografo di Eugene Cernan (Apollo 10, Apollo 17)

E' un periodo che mi sto interessando alle missioni di esplorazione lunare, in particolare leggendo i libri scritti di proprio pugno dagli astronauti (per adesso Gene Cernan, Walter Cunningham ed il controllore di volo Eugene Kranz)

Visto il costo spesso non trascurabile se su Amazon e' presente una copia usata, e' sempre benvenuta


La sorpresa e' stata tanta quando aprendo Last Man on the Moon di Cernan ho trovato la copia autografata dall'astronauta stesso.


Oltre al valore aggiunto di carattere non monetario, c'e' da dire che un libro firmato da un astronauta aumenta in modo significativo anche il suo valore pecunario. Come si vede dal "listino prezzi" una firma di Cernan e' quotata dallo stesso 300 dollari



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...