ArduinoJson funzionamento casuale

Sono alle prese con ArduinoJson che per mè ha un funzionamento casuale

Ho un Arduino Uno che riceve dati ambientali e li trasmette tramite seriale ad un NodeMCU
che a sua volta pubblicherà una pagina web sulla LAN (questa parte non ancora implementata)

Succede che a volte funziona e molto spesso no, casualmente

In Arduino Uno, uso la sua Seriale, mentre su NodeMCU uso SoftwareSerial per la ricezione dati,
che sono poi visualizzato su display e la sua Seriale

La uscita di arduino, la posso monitorare tramite il Monitor. La maggior parte delle volte = niente,
a volte invio un carattere tramite il Monitor, e si avvia la trasmissione Json.

Su NodeMCU non visualizzo o stampo niente, ma, a volte nelle varie prova, funziona.
Spenfo, riaccendo e niente da fare.

Sostituito Arduino, su NodeMCU, scambiato e cambiato pins del SoftwareSerial, alimentato da altra USB, da altro PC, con solo alimentatore, sempre inaffidabile.

Qui di seguito i due sketch

// Json Basic per Arduino UNO
//-----------------------------------------------


#include<ArduinoJson.h>

// ============= variabili globali
int i, A, B, C;


//boolean debugmode = false;    // disabilitare print debug
boolean debugmode = true;       // abilitare print debug

unsigned long tempoTx;			// timer ciclo Tx
unsigned long cicloTx = 10000;    // timer invio dati

unsigned long timer;


// ===========================================================
//    SETUP
// ===========================================================
void setup () {

// avvio seriale
   Serial.begin(9600);  
   
 
 if (debugmode) { 
   Serial.println("ArdBasic ");
   Serial.println("------------------------");
   Serial.println("setup completato");
   delay (2000);
   }

 timer = millis();
 tempoTx = millis();
}
// ========================================================
//         LOOP
// ========================================================
void loop () {

if (millis() - timer > 1000) {
  A++;
  B = A + 2;
  C = A * 2;

 timer = millis();
}
 
 if (A>220) A=1;

 
// ----- Json organizza i dati per la trasmissione
 const int capacity = JSON_ARRAY_SIZE(1) + 2*JSON_OBJECT_SIZE(2)+100;
 StaticJsonBuffer<capacity> jsonBuffer;
 JsonObject& base = jsonBuffer.createObject();

 if (millis() - tempoTx > cicloTx) 
  { 
    base["Uno"] = A;
    base["Due"] = B;
    base["Tre"] = C;

   if(Serial.available()>0)
   {
   base.printTo(Serial);
   }
   tempoTx = millis();
 }

}   //FINE LOOP

e questo per NodeMCU

// NodeMcu part

#include <SoftwareSerial.h>
SoftwareSerial s(D6,D5);  //Rx, Tx
#include <ArduinoJson.h>

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_ADDR 0x3C   // Address may be different for your module, also try with 0x3D if this doesn't work

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

int f1,f2,f3;

//================ SETUP ================== 
void setup() {

// Initialize Serial port
  Serial.begin(9600);
  Serial.println("EspBasic ");

   while (!Serial) continue;

  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
  display.clearDisplay();          
  display.display();
  
  display.setTextColor(WHITE);
  display.setTextSize(1);          
  display.setCursor(0, 0);   
  display.print("Esp-Basic ");
  display.display();
  delay(3000);

  display.clearDisplay();           
  display.display();

 Serial.println("setup completo");
}
//==================MAIN LOOP ============== 
void loop() {

  StaticJsonBuffer<400> jsonBuffer;

  JsonObject& base = jsonBuffer.parseObject(s);
  if (base == JsonObject::invalid())  return;

  display.setTextColor(WHITE);
  display.setTextSize(1);           // Set text size
  display.setCursor(0, 0);  
  if (!base.success()) {
    display.print("error parsing");
  }
    else {
  display.print("Received and parsed");
    }
  display.display();  
 
  Serial.println("Received and parsed");
  base.prettyPrintTo(Serial);
  Serial.println("");
  Serial.println("-----------xxxxx----------");

  f1 = base["Uno"];    //Scambio
  f2 = base["Due"];    //Produzione
  f3 = base["Tre"];   //Tensione

//DISPLAY  
  display.clearDisplay();  

  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.setCursor(0, 15); 
  display.print("Uno: "); 
  display.setCursor(60, 15); 
  display.print(f1);

  display.setTextSize(1);
  display.setCursor(0, 32); 
  display.print("Due: ");
  display.setCursor(60, 32);    
  display.print(f2);

  display.setTextSize(1);
  display.setCursor(0, 48); 
  display.print("Tre: "); 
  display.setCursor(60, 48);   
  display.print(f3);

} // END LOOP

>dinopaolo: Ciao, so che sei un vecchio utente del forum :slight_smile: , ma ... non riesco a trovare il tuo post di presentazione, per cui, cortesemente, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiederei di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO che, in tutti questi anni, è piuttosto cambiato :smiley: ... Grazie. :slight_smile:

Guglielmo

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.