Questo e' un promemoria per ricordarmi i pin del canale i2C su Esp32 Vroom 32 altrimenti detto ESP32_Core_Board_v2
Come da pinout
SCL = IO22
SDA = IO21
martedì 5 febbraio 2019
lunedì 4 febbraio 2019
Comparatore di tensione
Il motivo di questo post era rispondere alla domanda: posso generare un interrupt per una Arduino anche quando il dispositivo di misura non dispone di tale funzione (per esempio un puro strumento analogico con uscita della lettura come variazione di tensione??)
Una risposta puo' essere usare un comparatore di voltaggio mediante circuito operazionale che si comporti come un ADC ad un solo bit. Se il valore letto e' minore di quello di riferimento il circuito risponde con una tensione di uscita zero (stato zero) mentre se e' superiore risponde con uno stato 1 (tensione pari a 5V)
Simulazione effettuate con Every Circuit
Sul - dell'operazionale si imposta la tensione di riferimento Vr (la soglia a cui si vuole che il circuito cambi stato) e si pone per esempio a 3V. La V+ di alimentazione dell'operazione e' posta a 5V mentre la V- di alimentazione e' posta a zero
Nel + dell'operazione (pin non invertente) si inserisce la tensione pilota (Vp). Nel caso in cui Vr<Vp il circuito entra nello stato 1 ed all'uscita dell'operazionale si ha una tensione di 5V. In caso contrario si ha una tensione pari a 0
Nel primo caso la tensione sul - dell'operazionale (pin invertente) risulta essere di 3V mentre la tensione sul + dell'operazione e' di 4 V. In questa condizione in uscita dall'operazionale si ha un valore di Vcc a cui e' alimentato l'operazionale (quindi 5V)
Nel secondo caso la tensione sul + risulta inferiore al valore di riferimento
Dal punto di vista pratico si possono usare LM311, LM345 e LM741
Andando sul dettaglio estremo non e' vero che il circuito puo' assumere solo valori tra 0 e 5V. In un intorno di 10 mv intorno alla tensione di cambio di stato la tensione in uscita assume un valore intermedio tra 0 e 5V ma al mio fine pratico cio' non interessa
http://everycircuit.com/app/
http://www.bristolwatch.com/ele2/comparator.htm
Una risposta puo' essere usare un comparatore di voltaggio mediante circuito operazionale che si comporti come un ADC ad un solo bit. Se il valore letto e' minore di quello di riferimento il circuito risponde con una tensione di uscita zero (stato zero) mentre se e' superiore risponde con uno stato 1 (tensione pari a 5V)
Simulazione effettuate con Every Circuit
Sul - dell'operazionale si imposta la tensione di riferimento Vr (la soglia a cui si vuole che il circuito cambi stato) e si pone per esempio a 3V. La V+ di alimentazione dell'operazione e' posta a 5V mentre la V- di alimentazione e' posta a zero
Nel + dell'operazione (pin non invertente) si inserisce la tensione pilota (Vp). Nel caso in cui Vr<Vp il circuito entra nello stato 1 ed all'uscita dell'operazionale si ha una tensione di 5V. In caso contrario si ha una tensione pari a 0
Nel primo caso la tensione sul - dell'operazionale (pin invertente) risulta essere di 3V mentre la tensione sul + dell'operazione e' di 4 V. In questa condizione in uscita dall'operazionale si ha un valore di Vcc a cui e' alimentato l'operazionale (quindi 5V)
Nel secondo caso la tensione sul + risulta inferiore al valore di riferimento
Dal punto di vista pratico si possono usare LM311, LM345 e LM741
Andando sul dettaglio estremo non e' vero che il circuito puo' assumere solo valori tra 0 e 5V. In un intorno di 10 mv intorno alla tensione di cambio di stato la tensione in uscita assume un valore intermedio tra 0 e 5V ma al mio fine pratico cio' non interessa
http://everycircuit.com/app/
http://www.bristolwatch.com/ele2/comparator.htm
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)
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(){
}
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
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
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
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);
}
}
===============================================================
#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);
}
}
Iscriviti a:
Post (Atom)
Change Detection with structural similarity
L'idea di base e' quella di cercare le differenze tra le due immagini sottostanti Non e' immediatamente visibile ma ci sono dei ...
-
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...
-
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...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...