lunedì 4 febbraio 2019

Salvatempo COOP e Windows

Aggiornamento : dopo un mese e mezzo ho trovato in errore anche il lettore di codici a barre da cui si arriva al modello Zebra MK500




Quando uno si chiede come funzionano i salvatempo delle COOP e ne trova uno in bootloop
Per la cronaca il salvatempo e' un Datalogic Joya X1 con Windows CE (e costa un botto)




giovedì 31 gennaio 2019

ESP32 Vroom Sleep + Interrupt

Esempio di Esp32 su scheda Esp-Vroom-32 con modalita' di risveglio da Sleep mode mediante un interrupt fisico (in questo caso un contatto sul pin 33)

Per aggiungere la scheda alla IDE di Arduino si deve aggiungere questo link alle additional boards
https://dl.espressif.com/dl/package_esp32_index.json





Queste sono le impostazioni per programmare la scheda nella IDE





tra gli esempi si trova questo codice che imposta la modalita' deeep sleep e risveglio da pin 33
il consumo di corrente e' inferiore a 0.01A (questo e' il limite inferiore del mio misuratore di corrente USB)

=======================================================

/*
Deep Sleep with External Wake Up
=====================================
This code displays how to use deep sleep with
an external trigger as a wake up source and how
to store data in RTC memory to use it over reboots

This code is under Public Domain License.

Hardware Connections
======================
Push Button to GPIO 33 pulled down with a 10K Ohm
resistor

NOTE:
======
Only RTC IO can be used as a source for external wake
source. They are pins: 0,2,4,12-15,25-27,32-39.

Author:
Pranav Cherukupalli <cherukupallip@gmail.com>
*/

#define BUTTON_PIN_BITMASK 0x200000000 // 2^33 in hex

RTC_DATA_ATTR int bootCount = 0;

/*
Method to print the reason by which ESP32
has been awaken from sleep
*/
void print_wakeup_reason(){
  esp_sleep_wakeup_cause_t wakeup_reason;

  wakeup_reason = esp_sleep_get_wakeup_cause();

  switch(wakeup_reason)
  {
    case ESP_SLEEP_WAKEUP_EXT0 : Serial.println("Wakeup caused by external signal using RTC_IO"); break;
    case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("Wakeup caused by external signal using RTC_CNTL"); break;
    case ESP_SLEEP_WAKEUP_TIMER : Serial.println("Wakeup caused by timer"); break;
    case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.println("Wakeup caused by touchpad"); break;
    case ESP_SLEEP_WAKEUP_ULP : Serial.println("Wakeup caused by ULP program"); break;
    default : Serial.printf("Wakeup was not caused by deep sleep: %d\n",wakeup_reason); break;
  }
}

void setup(){
  Serial.begin(115200);
  delay(1000); //Take some time to open up the Serial Monitor

  //Increment boot number and print it every reboot
  ++bootCount;
  Serial.println("Boot number: " + String(bootCount));

  //Print the wakeup reason for ESP32
  print_wakeup_reason();

  esp_sleep_enable_ext0_wakeup(GPIO_NUM_33,1); //1 = High, 0 = Low

  //If you were to use ext1, you would use it like
  //esp_sleep_enable_ext1_wakeup(BUTTON_PIN_BITMASK,ESP_EXT1_WAKEUP_ANY_HIGH);

  //Go to sleep now
  Serial.println("Going to sleep now");
  esp_deep_sleep_start();
}

void loop(){
  }

Beta testing Alexa Skills

Per sviluppare Alexa Skills puo' essere necessario un programma di beta testing. Cio' e' possibile con l'unica (e non banale) limitazione che tutti i beta tester siano registrati come developer presso Amazon


Per permettere ad altri sviluppare a fare da beta tester si puo' usare questo metodo

https://developer.amazon.com/it/blogs/post/Tx2EN8P2AHAHO6Y/How-to-Add-Beta-Testers-to-Your-Skills-Before-You-Publish

anche se non e' attualmente funzionante in Italia sembra che nel futuro il beta testing seguira' invece la procedura indicata da questo link

https://developer.amazon.com/it/blogs/alexa/post/42e7de5c-f7ef-4e3e-8391-c61fe24f6caa/improve-skill-quality-with-the-new-beta-testing-tool-for-alexa-skills-beta

IBM Netfinity 3000 alias Flip

La mia collezione si e' arricchita di un IBM Netfinity 3000, tecnicamente una workstation anche se e' stata usata nel tempo anche come server

Ho un legame particolare con questo computer perche' e' stato il mio primo computer di lavoro "serio" come amministratore di rete (il nome di rete della mia macchina era Flip, i nomi di rete derivavano tutti dalla Banda di Topolino)




Si tratta di PIII a 700 MHZ. La cosa pregevole (ed attualmente rara da ritrovare) e' la presenza di un disco di sistema SCSI)


Non ricordavo che le schede ISA fossero montate su una riser board ma ricordavo perfettamente quanto pesa il computer


Attualmente e' montato Windows NT 4.0 SP6 ma non so se montero' qualcosa di piu' recente


mercoledì 30 gennaio 2019

SMS + DeepSleep + Interrupt in Particle Electron

Prendendo spunto dal post precedente in questo caso l'SMS e' inviato da una Particle Electron generato da un interrupt su pin D2 (in questo caso pero' mandando il pin a GND) partendo pero' da una condizione di Deep Sleep

===============================================================
#include "application.h"
#include "cellular_hal.h"
STARTUP(cellular_credentials_set("TM", "", "", NULL));

const char* phNum = "+39347107xxxx";
const char* msg = "Interrupt fired";
int  ret;


void setup()
{
 pinMode(D7, OUTPUT);
 pinMode(D2, INPUT_PULLDOWN);    // sets pin as input
}

void loop()
    {
    digitalWrite(D7, HIGH);

    System.sleep(D2,FALLING);
    Cellular.on();
    Cellular.connect();
    delay(20000);
    if (Cellular.ready() == true)
    {
      ret = Cellular.command("AT+CMGF=1\r\n");
      ret = Cellular.command("AT+CMGS=\"%s%s\",129\r\n",(phNum[0] != '+') ? "+" : "", phNum); //
      ret = Cellular.command("%s\x1a", msg);
      digitalWrite(D7, LOW);
      delay(5000);

    }

}

Invio SMS da Particle Electron da interrupt

Come gestire gli interrupt fisici su Particle Electron ed inviare SMS
Al contratio di Arduino Uno sulla Electron ci sono molteplici pin che possono essere settati per ricevere un interrupt. In questo caso e' stato scelto il D2


Per atttivare l'interrupt viene mandata una corrente di 3.3V sul Pin D2 e viene settata una variabile volatile in modo che possa essere intercettata anche fuori dall'interrupt nella funzione loop. La gestione di invio inoltre non puo' essere gestita all'interno della funzione di interrupt

per la compilazione

particle compile electron interrupt.ino --saveTo interrupt.bin
particle flash --usb  interrupt.bin 

Nel video si osserva la procedura

----------------------------------------------------------------
#include "application.h"
#include "cellular_hal.h"
STARTUP(cellular_credentials_set("TM", "", "", NULL));

const char* phNum = "+3934710xxxxx";
const char* msg = "Interrupt fired";
int  ret;
volatile bool invio;

void  IN4_ISR() {
      invio = true;
}

void setup()
{
  invio = false;
 pinMode(D7, OUTPUT);
 pinMode(D2, INPUT_PULLDOWN);    // sets pin as input
 attachInterrupt(D2, IN4_ISR, FALLING);  //RISING, FALLING, CHANGE
}

void loop()
    {
      if (invio)
      {
        digitalWrite(D7, HIGH);
        ret = Cellular.command("AT+CMGF=1\r\n");
        ret = Cellular.command("AT+CMGS=\"%s%s\",129\r\n",(phNum[0] != '+') ? "+" : "", phNum); //
        ret = Cellular.command("%s\x1a", msg);
        invio = false;
        delay(500);
        digitalWrite(D7, LOW);
      }

}

martedì 29 gennaio 2019

Electron Particle e SIM Mobile Things

Dopo un po' di tempo ho ripreso in mano la Electron Sparkle ed ho montato una scheda SIM di Things Mobile. Nel tempo peraltro e' andata persa l'antenna originale della confezione prodotta da Taoglass ed il dispositivo non puo' funzionare senza... ho preso questa antenna su Amazon come sostituzione


Per configurare la scheda con una SIM di terze parti si deve installare la parte CLI di Particle con

npm install --unsafe-perm --verbose -g particle-cli

(attenzione potrebbero esserci problemi nella compilazione della seriale)

particle update

Per effettuare il flash del firmware si deve premere RESET+MODE, poi rilasciare RESET e tenendo premuto MODE attendere che il led diventi giallo

Si deve scaricare il file Tinker.ino modificando l'APN che per Mobile Things e' TM

#include "cellular_hal.h"
STARTUP(cellular_credentials_set("TM", "", "", NULL));
ed impostando il KeepAlive

Queste righe dovranno essere comprese in ogni script che verra' caricato sul dispositivo

si compila quindi
particle compile electron tinker.ino --saveTo firmware.bin
particle flash --usb firmware.bin


Puo' essere necessario effettuare il claim del device ma prima si deve conoscere il seriale
Per effettuare l'identify si deve premere il pusante Mode fino a quando il led diventa blu.
A questo punto si lancia

particle identify

Ci si logga sul cloud
particle cloud login

e si efffettua il claim
particle device add device_ID


Per verificare che tutto sia andato a buon fine si puo' provare ad accendere il led blu da linea di comando con il comando (dove Geocell e' il nome mnemonico del dispositivo)

particle call Geocell digitalwrite D7,HIGH

per l'invio degli SMS Mobile Things non ha problemi ed e' sufficiente il seguente codice
-----------------------------------------------
const char* phNum = "+39347107xxxxx";
const char* msg = "Test message";
int  ret;

void setup() {
Serial.begin(115200);
ret = Cellular.command("AT+CMGF=1\r\n");
Serial.print("Return from message format = ");
Serial.println(ret);
ret = Cellular.command("AT+CMGS=\"%s%s\",129\r\n",(phNum[0] != '+') ? "+" : "", phNum); //
Serial.print("Return from phNum send = ");
Serial.println(ret);
ret = Cellular.command("%s\x1a", msg);
Serial.print("Return from message send = ");
Serial.println(ret);

}


void loop() {

}
--------------------------------------------------



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