lunedì 11 marzo 2024

Standard 7090: STM32F103

Nell'ambito dello sviluppo del sistema Standard 7090, che state seguendo su questo blog da alcuni post, oggi integriamo anche una scheda con microcontrollore STM32F103. Si tratta di un microcontrollore basato su ARM Cortex-M3 con clock da 72MHz. Tale micro ha guadagnato successo anche attraverso la sua versione low-cost proposta sotto forma di scheda Bluepill (si tratta generalmente di un micro CKS).

Scheda Standard 7090 con programmatore ST Link V2

Alcuni test preliminari, ci hanno consentito di sviluppare del codice con l'IDE STM32Cube, oppure con l'IDE Arduino (STM32duino) e hanno dato esito positivo. Pertanto abbiamo qui deciso di integrare anche questo microcontrollore nello Standard 7090, sia per il basso costo sia per le prestazioni molto interessanti.

Schermata della comunicazione UART

Non mi resta che augurarVi una buona sperimentazione con questa piattaforma, ricordandovi che potete contattarmi personalmente per eventuali sviluppi professionali.

Un caro saluto e a presto :)

domenica 10 marzo 2024

ESP32: effetto Wow!

 Ero alla ricerca di un titolo per questo Post. Pensavo ESP 32 ...da brividi!

Fig. 1 - ESP32. Piastra di assieme prototipale


In effetti se realizzerete una piastra prototipale come quella in Figura 1, alcuni brividi potrebbero occorrere nel corso dei vostri sviluppi (...se non altro per l'utilizzo di così tante connessioni precarie come quelle dei cavetti di collegamento rapido.).

Cosa abbiamo inserito questa volta sulla nostra piastra prototipale? Ecco l'elenco:

  1. Audio I2S con altoparlante
  2. Display OLED
  3. Sensore di pressione BMP180
  4. Sensore di umidità e temperatura DHT11
  5. Orologio datario DS3231
  6. microSD card con File System
  7. Rele di potenza
  8. Led PWM
  9. Encoder rotativo
  10. Web Server con visualizzazione dati e comandi remoti

L'effetto Wow è che il tutto è stato provato con un programma compatibile con l'IDE Arduino.

Se siete interessati a ricevere gratuitamente il codice sorgente, contattatemi personalmente.

Per il resto Vi auguro una buona sperimentazione con ESP 32 e a presto :)


sabato 9 marzo 2024

Standard 7090: Raspberry Pi Zero W - Parte 1

Nel nostro laboratorio non vivono solo schede Arduino, ESP8266, ESP32, STM32, ma c'è ampio spazio per le applicazioni Linux Embedded. Oggi è la volta di Raspberri Pi - un noto progetto multiboard che offre prestazioni di tutto rispetto.


La scheda Raspberry Pi Zero W con interfaccia UART su scheda 70x90


In questo post integreremo la scheda Raspberry Pi Zero W (...wireless) con il Bus 7090 e inizieremo a configurare la porta seriale per comunicare con il Display TFT e con le altre eventuali schede.

Dopo aver configurato il file system con l'imager appropriato (ho utilizzato una microSD da 64 Giga per poter provare un'ampia varietà di applicazioni), configuriamo anche la console UART, in modo da poter avere un doppio accesso al sistema sia da SSH sia da porta seriale.

Per la configurazione della console utilizzare anche l'utility raspi-config. In particolare occorre assicurarsi che la console seriale sia abilitata nella sezione interfacce.

Verificare le opzioni con il comando: sudo raspi-config


Con l'utility PuTTY ho effettuato tutti i test seguenti:

Configurare SSH e IP address della scheda Raspberry per connettersi

Configurare ttyS0 con il comando: sudo stty -F /dev/ttyS0 9600

Aprire una sessione seriale su COMx alla velocità di 9600 bps

Connettersi con l'adattatore seriale USB su COMx

Al termine di questo esperimento avremo configurato la porta UART ttyS0 alla velocità di 9600 bps e potremo utilizzarla per comunicare con le altre schede del sistema Standard 7090.

Vi auguro una buona sperimentazione con Raspberry e a pesto.


Standard 7090: Arduino Nano 328 + nRF24L01

Ancora una scheda con Arduino ATmega328. Questa volta la integriamo su di una scheda 70x90 e con l'utilizzo di un modulo ricetrasmettitore nRF24L01. Il tutto è stato predisposto per funzionare sul Bus 7090 e potersi collegare al Display TFT, alimentandosi dalla scheda PSU.

Scheda 70x90 con modulo PCB Arduino Nano 328 + nRF24L01

Il ricetrasmettitore nRF24L01 è un modulo molto popolare, da collegare alla porta SPI di Arduino o altri microcontrollori, con ottime caratteristiche di connessione dati fino alla velocità di 2Mbps in banda ISM (2,4 GHz). Esso consente di ricevere i dati dai nostri sensori e comandare i nostri attuatori, con un architettura di rete Punto-Punto oppure Punto-Multipunto. Il modulo RF è molto versatile e si presta nelle varie versioni disponibili per collegamenti dati da poche decine di metri ad alcune centinai di metri.


Test di integrazione con Display TFT, Modulo PSU e Bus 7090


Le librerie software per l'IDE Arduino sono ben fatte e documentate. L'integrazione di un microcontrollore con una rete di sensori/attuatori non risulterà difficile.

Ecco un semplice software di ricezione dati testato con l'IDE Arduino 1.8.19.

/*

READ THIS BEFORE USE:

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS”

AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,

THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.

IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,

INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,

PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;

OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,

STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/


////////////////////////////////////////////////////

// SYSTEM-24

// nRF24L01+ Receiver v.1.0 last update 07/03/2024 

// Periferal:

// nRF24L01+

////////////////////////////////////////////////////


#include <SPI.h>

#include <nRF24L01.h>

#include <RF24.h>


//objects

RF24 radio(7, 8); // CE, CSN       


//globals

const byte addressOfSlave [][6] = {"SLV01", "SLV02"};  //Setting the Slave TX Pipe Address

const byte addressOfMaster [][6] = {"MST01", "MST02"};  //Setting the Master RX Pipe Address

String nrf_message = ""; //message received fron NRF24L01

char rx_text[32]; //nRF24L01 rx buffer

int line_count = 0; //display line counter


//system setup

void setup() {

  Serial.begin(9600);


  //time to reset dispay TFT

  delay(5000);


  //nRF24L01+

  radio.begin();                    //start communication

  radio.setPALevel(RF24_PA_HIGH);   //set it as minimum or maximum depending on the distance between the transmitter and receiver.

  radio.setDataRate(RF24_250KBPS);  //minimum

  radio.openReadingPipe(1, addressOfMaster[0]); //Slave rx

  radio.startListening(); //This sets the module as receiver

  Serial.println("$Ready for listening!");

  delay(200);

  line_count++;


  //delete nRF input buffer

  if(radio.available()) {

    radio.read(&rx_text, sizeof(rx_text));    //read data

  }

} //setup


//application loop

void loop() {


  //check nRF24 radio

  if(radio.available()) {


    radio.read(&rx_text, sizeof(rx_text));    //reading data

    nrf_message = String(rx_text);

    Serial.print("$");

    Serial.println(nrf_message);

    line_count++;


    //manage the TFT text page

    if (line_count > 14) {

      Serial.print("$%CLEAR%\r\n");

      delay(500);

      line_count = 0;

    }

  }


} //loop


* - * - * - *

Il trasmettitore, invece utilizza questo codice per trasmettere i dati di alcuni sensori. (Abbinare correttamente ricevitore e trasmettitore per un funzionamento ottimale)

* - * - * - *


/*

READ THIS BEFORE USE:

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS”

AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,

THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.

IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,

INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,

PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;

OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,

STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/


/* SYSTEM-24 Package */ 

/* nRF24L01+ Remote Transmitter with DHT, LDR, 18B20 - v.1.5 last update 09/03/2024 */

/* Transmit format 0x:yyyy... */


#include <SPI.h>

#include <nRF24L01.h>

#include <RF24.h>

#include <Wire.h>

#include <DHT.h>

#include <OneWire.h>

#include <DallasTemperature.h>


#define DHTPIN 6        // Digital pin connected to the DHT sensor

#define DHTTYPE DHT11   // DHT 11

#define ONE_WIRE_BUS 4  //pin D4


// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)

OneWire oneWire(ONE_WIRE_BUS);


// Pass our oneWire reference to Dallas Temperature. 

DallasTemperature sensors(&oneWire);


RF24 radio(7, 8); // CE, CSN  (ex 9, 10)

DHT dht(DHTPIN, DHTTYPE);


const byte address [][6] = {"MST01", "SLV01"};  //Setting the two addresses. One for transmitting and one for receiving

char pck_signal[32];

int led_pin = 3;

char str[4];


void setup() {


  //ldr

  pinMode(5, OUTPUT); //ldr power

  digitalWrite(5,HIGH); //power on LDR


  //serial

  Serial.begin(9600);


  //radio

  radio.begin();

  radio.openWritingPipe(address[0]); //Setting the address where we will send the data

  radio.openReadingPipe(1, address[1]); //Setting the address where we will receive the data

  radio.setPALevel(RF24_PA_HIGH);       //You can set this as minimum or maximum depending on the distance between the transmitter and receiver.

  radio.setDataRate(RF24_250KBPS); //minimum


  //DHT

  dht.begin();

  digitalWrite(5,HIGH); //power on LDR

  Serial.println("Remote DHT, LDR, 18B20");


  //DS18B20

  sensors.begin(); // IC Default 9 bit  

}


void loop() {


  String temp = "";

  float t;

  float h;

    

  // DHT11 - Read temperature as Celsius (the default)

  t = dht.readTemperature();

  temp = "00"; //node '0'

  temp.concat(":");

  temp.concat(String(t,1));

  temp.toCharArray(pck_signal,temp.length());


  //DHT11 - Read humidity

  h = dht.readHumidity();

  temp.concat(",");

  temp.concat(String(h,1));

  temp.toCharArray(pck_signal,temp.length());


  //LDR

  temp.concat(",");

  sprintf(str, "%04d", 1023 - analogRead(A7));

  temp.concat(str);

  temp.toCharArray(pck_signal,temp.length());

  

  //DS18B20

  sensors.requestTemperatures(); // Send the command to get temperatures

  temp.concat(",");

  temp.concat(String(sensors.getTempCByIndex(0),1)); //Index 0

  temp.concat(0x00); 

  temp.toCharArray(pck_signal,temp.length());


  //transmit packet

  Serial.println(pck_signal);

  radio.write(&pck_signal, sizeof(pck_signal));

  

  //loop every second

  delay(1000);


} //loop

Buon lavoro di interconnessione dati. A presto.


Standard 7090: Esperimenti con ESP8266 - Parte 1

Come visto nei precedenti post, in questo blog stiamo proponendo una serie di schede prototipali in formato 70x90, con varie architetture a microcontrollore. Standard 7090 è un formato proprietario utilizzato per l'interconnessione di blocchi funzionali altrimenti non compatibili tra loro sia meccanicamente sia elettricamente.


Scheda 70x90 con modulo ESP8266 e nRF24L01 + PA/LNA

In questo esperimento abbiamo interconnesso un modulo ESP8266 con il display TFT 320x240, basato su Arduino R3 ed il modulo alimentatore PSU. 

ESP8266 nei test di integrazione in laboratorio

Da un punto di vista elettrico la scheda ESP8266 si connette al bus 5V - GND (Vin del modulo 8266), mentre il modulo nRF24L01 si connette al bus 3V3 - GND. L'uscita seriale (TX1 - Pin D4) è alla tensione 3,3 Volt e può essere compatibile con l'ingresso RX del display. La velocità è impostata su 9600 bps, per un semplice monitor di funzionamento.

Ecco un frammento di codice per i primi test, compilato con l'IDE Arduino 1.8 e successive versioni. La particolarità di questo codice è che utilizza sia la porta seriale di default su USB e sia la metà della porta seriale 1, disponibile solo in TX. Notare che per la Serial 1 vengono inviate le sequenze di controllo del Display TFT.


/*

READ THIS BEFORE USE:

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS”

AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,

THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.

IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,

INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,

PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;

OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,

STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/


/*

  ESP8266 NodeMCU - HelloTFT

  Tx Data on Serial1 (UART1 TX pin D4) 9600, n, 8, 1

  ver.1.0 last update 06/03/2024

*/


void setup() {


  Serial.begin(9600);

  Serial1.begin(9600);


  delay(5000); //leave time to TFT Init

  Serial.println("I'm ESP8266");

  Serial.println("Transmitting on D4 TX1");


  Serial1.print("$%CLEAR%\r\n"); //Reset display

  delay(500);

  Serial1.print("$Hello TFT\r\n");

  delay(200);

  Serial1.print("$I'm ESP8266.\r\n");

  delay(200);

  Serial1.print("$%GREEN%\r\n");

  delay(200);

  Serial1.print("$See You soon!\r\n");

  delay(200);

  Serial1.print("$%CYAN%\r\n");

  delay(200);

  Serial1.print("$This is a simple sketch.\r\n");

  delay(200);

  Serial1.print("$%LARGE%\r\n");

  delay(200);

  Serial1.print("$Bye\r\n");

  delay(200);


}


void loop() {

  Serial.print("ESP8266 is running\r\n");

  delay(1000);

}


Buona sperimentazione e a presto.