Visualizzazione post con etichetta SMS. Mostra tutti i post
Visualizzazione post con etichetta SMS. Mostra tutti i post

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ì 14 febbraio 2017

SMS Server su Android

Se con i vecchi Nokia era molto semplice creare un SMS server, con Android cio' non e' possibile perche' i dati sono contenuti in una sezione del disco non accessbile in modo immediato e non esiste la possibilita' di default di creare un backup.
Alcuni hanno sviluppati applicazioni Android che leggono il database degli SMS e li reinviano via mail ma la soluzione non e' molto elegante e flessibile...l'ideale e' accedere via ADB

Per prima cosa pero' e' necessario effettuare il root del dispositivo (nel mio caso un Moto E)



i dati degli SMS sono contenuti nel file  /data/data/com.android.providers.telephony/databases/mmssms.db 
(e' un database Sqlite) che risulta essere accessibile solo a root....il gioco e' quindi copiarlo in una porzione del disco raggiungibile via adb pull come /data/local/tmp (da creare a mano via adb shell una volta per tutte).

----------------------------------
adb shell "su -c 'rm /data/local/tmp/mmssms.db'"

adb shell "su -c 'cp /data/data/com.android.providers.telephony/databases/mmssms.db /data/local/tmp'"
adb shell "su -c 'chmod 755 /data/local/tmp/mmssms.db'"
adb pull /data/local/tmp/mmssms.db
----------------------------------

Una volta ottenuto il file sul proprio computer gran parte del lavoro e' fatto.
Usando DB Browser for SQLite (per comodita') si osservano tutte le tabelle


il mio interesse e' quello di avere in uscita in CSV dei soli dati degli SMS. 

A questo punto mi interessa estrarre solo i campi body e date_sent e si puo' fare con il seguente script bash

------------------
sqlite3 mmssms.db << EOF
.mode csv
.headers on
.separator ";"
.output sms2.csv
select body,datetime(date_sent/1000, 'unixepoch','localtime') from sms;
.exit
EOF
------------------




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