Ho creato una libreria per il dispositivo EByte LoRa ed anche uno shield. Tuttavia, quando l’ho usato in un altro progetto ho avuto il problema del ridotto numero di pins visto che 2 erano usati dal SoftwareSerial. Per risolvere queste problematiche sono passatto all’HardwareSerial. Gli ampere potrebbero essere insufficienti quindi aggiungo un regolatore di tensione per alimentare l’EByte e32 in uno e nell’altro shield direttamente dai 5v.
SoftwareSerial shield
Quindi questo shield è abbastanza diverso da quello mostrato su “Ebyte LoRa E32 per Arduino, esp32 o esp8266: WOR (wake on radio) anche il microcontrollore ed il nuovo WeMos D1 shield” lo schema precedente è questo
E il risultato è
WeMos LoRa shield con SoftwareSerial PCBWay
HardwareSerial shield con regolatore di tensione 3.3vge regulator
Il nuovo shield è simile al precedente, ma ha più funzionalità, ma ha il limite di 3,3v per l’alimentazione al dispositivo LoRa, di conseguenza limitandone la potenza.
Come puoi vedere ora, c’è un regolatore di tensione per alimentare il dispositivo e32 e RX, TX è collegato a TX e RX del microcontrollore, un pin è libero per collegare Serial to USB per eseguire il debug su Serial1.
Quindi lo schema PCB diventa così
Più complesso e con più pin e pulsanti, ora AUX, M0 e M1 sono selezionabili e hai due opzioni per ogni ingresso e32.
Ecco il prototipo fresato.
Ed ecco tutte le opzioni
Ecco il BOM
N° | Object | Desc |
---|---|---|
2 | Electrolytic Capacitor | capacitance 10µF |
2 | Generic female header – 8 pins | 2.54mm ♀ |
1 | Generic female header – 7 pins | 2.54mm ♀ |
7 | Generic male header – 2 pins | 2.54mm ♂ |
3 | Generic male header – 3 pins | 2.54mm ♂ |
1 | DIP SWITCH | package dipswitch-03; channels 1 |
1 | Lora E32 | voltage 3-5V; type Basic |
3 | 4.7kΩ Resistor | |
2 | 10kΩ Resistor | |
1 | LD1117V33 | package 78xxl; voltage regulator 3.3V; chip LD1117VXX |
1 | WeMos D1 Mini | CPU ESP-8266EX |
WeMos D1 su WeMos D1 mini - NodeMCU V2 V2.1 V3 - esp01 - esp01 programmer
EBYTE e32 su AliExpress (433MHz 5Km) - AliExpress (433MHz 8Km) - AliExpress (433MHz 16Km) - AliExpress (868MHz 915MHz 5.5Km) - AliExpress (868MHz 915MHz 8Km)
3.3v voltage regulator su AliExpress SMD (AMS1117) - AliExpress 3.3v (LM1117) - AliExpress 5v (7805) - AliExpress 9v (7809)AliExpress 12v (7812) - AliExpress 3.3v TO-92 (78L33)
Dip Switch su AliExpressVideo della saldatura
Ecco dove reperire il PCB
WeMos LoRa shield con regolatore di tensione a 3.3v PCBWay
HardwareSerial shield versione 5v
Dopo un po capisco che per raggiungere una buona distanza devo alimentare il dispositivo LoRa con 5v, e rifare lo shield come da foto.
I passaggi di saldatura sono gli stessi, ma rimuovo il regolatore di tensione e aggiungo un interruttore da 3,3V all’alimentazione USB da 5 V.
Ecco l’elenco delle parti.
N° | Object | Desc |
---|---|---|
2 | Generic female header – 8 pins | 2.54mm ♀ |
1 | Generic female header – 7 pins | 2.54mm ♀ |
7 | Generic male header – 2 pins | 2.54mm ♂ |
3 | Generic male header – 3 pins | 2.54mm ♂ |
1 | DIP SWITCH | package dipswitch-03; channels 1 |
1 | Lora E32 | voltage 3-5V; type Basic |
3 | 4.7kΩ Resistor | |
2 | 10kΩ Resistor | |
1 | WeMos D1 Mini | CPU ESP-8266EX |
WeMos D1 su WeMos D1 mini - NodeMCU V2 V2.1 V3 - esp01 - esp01 programmer
EBYTE e32 su AliExpress (433MHz 5Km) - AliExpress (433MHz 8Km) - AliExpress (433MHz 16Km) - AliExpress (868MHz 915MHz 5.5Km) - AliExpress (868MHz 915MHz 8Km)
Dip Switch su AliExpress
Ed ecco il risultato finale.
Qui puoi reperire il PCB
WeMos LoRa shield con switch da 3.3v a 5v PCBWay
Esempio
Un esempio di configurazione dello shield è
LoRa_E32 e32ttl(&Serial, D3, D0, D8);
Ma ricorda, AUX con un ponticello di cambio può usare il pin D3 o D6, M0 può essere D0 o D5, M1 può essere D8 o D7.
Ecco un semplice scketch per recuperare la configurazione del dispositivo; fare riferimento al tutorial completo della libreria per maggiori dettagli sui “Dispositivi LoRa e32”.
/*
* LoRa E32-TTL-100
* Get configuration.
* https://mischianti.org
*
*/
#include "Arduino.h"
#include "LoRa_E32.h"
LoRa_E32 e32ttl(&Serial, D3, D0, D8);
void printParameters(struct Configuration configuration);
void printModuleInformation(struct ModuleInformation moduleInformation);
void setup() {
Serial.begin(9600);
delay(500);
// Startup all pins and UART
e32ttl100.begin();
ResponseStructContainer c;
c = e32ttl100.getConfiguration();
// It's important get configuration pointer before all other operation
Configuration configuration = *(Configuration*) c.data;
Serial.println(c.status.getResponseDescription());
Serial.println(c.status.code);
printParameters(configuration);
ResponseStructContainer cMi;
cMi = e32ttl100.getModuleInformation();
// It's important get information pointer before all other operation
ModuleInformation mi = *(ModuleInformation*)cMi.data;
Serial.println(cMi.status.getResponseDescription());
Serial.println(cMi.status.code);
printModuleInformation(mi);
}
void loop() {
}
void printParameters(struct Configuration configuration) {
Serial.println("----------------------------------------");
Serial.print(F("HEAD BIN: ")); Serial.print(configuration.HEAD, BIN);Serial.print(" ");Serial.print(configuration.HEAD, DEC);Serial.print(" ");Serial.println(configuration.HEAD, HEX);
Serial.println(F(" "));
Serial.print(F("AddH BIN: ")); Serial.println(configuration.ADDH, BIN);
Serial.print(F("AddL BIN: ")); Serial.println(configuration.ADDL, BIN);
Serial.print(F("Chan BIN: ")); Serial.print(configuration.CHAN, DEC); Serial.print(" -> "); Serial.println(configuration.getChannelDescription());
Serial.println(F(" "));
Serial.print(F("SpeedParityBit BIN : ")); Serial.print(configuration.SPED.uartParity, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTParityDescription());
Serial.print(F("SpeedUARTDataRate BIN : ")); Serial.print(configuration.SPED.uartBaudRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTBaudRate());
Serial.print(F("SpeedAirDataRate BIN : ")); Serial.print(configuration.SPED.airDataRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getAirDataRate());
Serial.print(F("OptionTrans BIN : ")); Serial.print(configuration.OPTION.fixedTransmission, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getFixedTransmissionDescription());
Serial.print(F("OptionPullup BIN : ")); Serial.print(configuration.OPTION.ioDriveMode, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getIODroveModeDescription());
Serial.print(F("OptionWakeup BIN : ")); Serial.print(configuration.OPTION.wirelessWakeupTime, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getWirelessWakeUPTimeDescription());
Serial.print(F("OptionFEC BIN : ")); Serial.print(configuration.OPTION.fec, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getFECDescription());
Serial.print(F("OptionPower BIN : ")); Serial.print(configuration.OPTION.transmissionPower, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getTransmissionPowerDescription());
Serial.println("----------------------------------------");
}
void printModuleInformation(struct ModuleInformation moduleInformation) {
Serial.println("----------------------------------------");
Serial.print(F("HEAD BIN: ")); Serial.print(moduleInformation.HEAD, BIN);Serial.print(" ");Serial.print(moduleInformation.HEAD, DEC);Serial.print(" ");Serial.println(moduleInformation.HEAD, HEX);
Serial.print(F("Model no.: ")); Serial.println(moduleInformation.model, HEX);
Serial.print(F("Version : ")); Serial.println(moduleInformation.version, HEX);
Serial.print(F("Features : ")); Serial.println(moduleInformation.features, HEX);
Serial.println("----------------------------------------");
}
Grazie
- WeMos D1 (esp8266): shield i2c per la gestione di encoder, pulsanti multipli e led
- WeMos D1 (esp8266): relè shield
- WeMos D1 (esp8266): shield Ebyte LoRa (e32, e22 e e220)