Arduino OTA per Mega

413 views
Skip to first unread message

Lucio Pastore

unread,
Jun 12, 2019, 1:09:04 AM6/12/19
to souliss-it
Ho notato che ora arduino OTA dovrebbe essere utilizzabile anche con schede arduino mega dotate di ethernet schield

https://github.com/jandrassy/ArduinoOTA.

Qualcuno di voi ha già provato? Ho attualmente istallati 10 nodi Esp che controllo tramite OTA e due Mega collegati via cavo, non mi dispiacerebbe poterli aggiornare senza dover gironzolare con computer e cavetti...

Lucio Pastore

unread,
Mar 30, 2020, 12:47:42 PM3/30/20
to souliss-it
Buona serata a tutti.

Ho provato ad utilizzare l'aggiornamento tramite OTA su arduino Mega e tutto funziona correttamente utilizzando gli esempi.
Purtroppo il sistema utilizza la libreria Ethernet.h standard di arduino e quando cerco di integrarlo con Souliss il sistema compila senza errori ma non viene rilevato dall'IDE per la programmazione.
Sono a conoscenza che Souliss utilizza una libreria ethernet dedicata per funzionare, ma non ho la minima idea di quale motivo porti al mancato rilevamento. 

C'è qualcuno che ha qualche idea/alternativa/prova per verificare se si possa risolvere il problema?
In alternativa altri metodi per programmare un Arduino Mega in rete con istallato Souliss? 

A tutti coloro che potranno aiutarmi anzitutto un grazie in anticipo.

Domenico Carvetta

unread,
Mar 31, 2020, 9:24:55 AM3/31/20
to souliss-it
Ciao Lucio,
che versione IDE di Arduino utilizzi ?

Lucio Pastore

unread,
Mar 31, 2020, 9:43:56 AM3/31/20
to souliss-it
Anzitutto grazie. Utilizzo l'ultima versione. Cerco sempre di seguire gli aggiornamenti. Ho paura che la libreria ethernet di souliss manchi di qualche cosa...

domenico carvetta

unread,
Mar 31, 2020, 9:46:56 AM3/31/20
to souli...@googlegroups.com
1.8.12; vero?
Io ho lo stesso problema su ESP8266 quando utilizzo la IDE 1.6.12 invece dell'ultima da me installata (1.8.9).


Lucio Pastore

unread,
Mar 31, 2020, 9:47:35 AM3/31/20
to souliss-it
Un altra precisazione. #include ArduinoOTA.h devo metterlo dopo l'inclusione di souliss.h e non devo includere la libreria ethernet.h altrimenti il compilatore mi restituisce un errore di compilazione.

domenico carvetta

unread,
Mar 31, 2020, 9:54:38 AM3/31/20
to souli...@googlegroups.com
Manda lo sketch, lo proviamo a 4 mani; poi ti dico, grazie.

Lucio Pastore

unread,
Mar 31, 2020, 4:06:27 PM3/31/20
to souliss-it
Allora… eccomi qui.
 
l'IDE è in realtà 1.8.10; la procedura per utilizzare la libreria necessita la riscrittura del bootloader (l'ho effettuata con un arduino leonardo programmato come programmatore ISP) e l'utilizzo di una configurazione scheda dedicata denominata "Arduino Mega 2560 (Optiboot)".

Caricando lo sketch di esempio per OTA: 

#include <SPI.h>
#include <Ethernet.h>
#include <ArduinoOTA.h>
//#define Serial SerialUSB
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

void setup() {
  Serial.begin(9600);
  while (!Serial);
  Serial.println("Initialize Ethernet with DHCP:");
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
  } else {
    Serial.print("  DHCP assigned IP ");
    Serial.println(Ethernet.localIP());
  }
  ArduinoOTA.begin(Ethernet.localIP(), "Arduino", "password", InternalStorage);
}

void loop() {
  ArduinoOTA.poll();
}

Tutto funziona correttamente e la scheda viene elencata nella lista porte. Il caricamento via Ethernet avviene anche esso correttamente.


Modificando il file di esempio d Souliss:

#include "SoulissFramework.h"
// Configure the framework
#include "bconf/StandardArduino.h"          // Use a standard Arduino
#include "conf/ethW5100.h"                  // Ethernet through Wiznet W5100
#include "conf/Gateway.h"                   // The main node is the Gateway, we have just one node
#include "conf/Webhook.h"                   // Enable DHCP and DNS
// Include framework code and libraries
#include <SPI.h>
#include "Souliss.h"
#include <ArduinoOTA.h>
// This identify the number of the LED logic
#define MYLEDLOGIC          0              
void setup()
{  
    Initialize();
    GetIPAddress();                         
    SetAsGateway(myvNet_dhcp);       // Set this node as gateway for SoulissApp 
    ArduinoOTA.begin(Ethernet.localIP(), "Arduino", "password", InternalStorage);
    Set_SimpleLight(MYLEDLOGIC);        // Define a simple LED light logic
    pinMode(2, INPUT);                  // Hardware pulldown required
    pinMode(9, OUTPUT);                 // Power the LED
}
void loop()
{
    EXECUTEFAST() {                    
        UPDATEFAST();  
        FAST_50ms() {   // We process the logic and relevant input and output every 50 milliseconds
            DigIn(2, Souliss_T1n_ToggleCmd, MYLEDLOGIC);            // Use the pin2 as ON/OFF toggle command
            Logic_SimpleLight(MYLEDLOGIC);                          // Drive the LED as per command
            DigOut(9, Souliss_T1n_Coil, MYLEDLOGIC);                // Use the pin9 to give power to the LED according to the logic
        }
        FAST_GatewayComms();                                            
    }
    ArduinoOTA.poll();
}

L'IDE arduino non elenca più la scheda all'interno della lista Porte. "conf/Webhook.h" attivare le parti della libreria Ethernet escluse da Souliss. Ho inoltre provato anche a configurare l'IP statico (come d'altronde mi servirebbe nelle mie applicazioni) ma stesso risultato.

Lucio Pastore

unread,
Apr 19, 2020, 6:59:10 AM4/19/20
to souliss-it
Cia a tutti, ultima prova prima di gettare la spugna. Utilizzando questa procedura l'IDE di Arduino si connette al dispositivo, trasmette la password, ma... da errore durante il caricamento in memoria.
Il mancato riconoscimento sembrerebbe essere la mancanza del servizio MDNS. Per il mancato caricamento non saprei. Ho provato a confrontare il codice della libreria ethernet di Arduino con quella modificata di Souliss e sono profondamente diverse. Impossibile per mè metterci mano senza creare altri ploblemi.
Qualcuno ne conosce il funzionamento? 
 
La procedura che ho provato è qui di seguito descritta:

## OTA Upload from IDE without 'network port'
Some of the supported networking libraries don't have the UDP.beginMulticast function and can't start a MDNS service to propagate the network port for Arduino IDE. And sometimes the MDNS port is not detected for the good libraries too. Arduino IDE doesn't yet allow to enter the IP address.
The workaround is to configure a fake programmer for Arduino OTA. You can use [my_boards](https://github.com/jandrassy/my_boards) as starting point. For Arduino Mega it is the best option for all ArduinoOTA aspects, for other boards it gives you control about your custom settings. In your copy of my_boards in programmers.txt, configure the IP address and restart the IDE. Note: the esp boards packages can't be used as referenced packages in my_boards style.
If you don't want to use my_boards, the platform.local.txt files for avr and samd in extras folder in this library contain the configuration for arduinoOTA tool as programmer. Copy platform.local.txt next to platform.txt in the hardware package of your board. The programmers.txt file can't have a 'local' extension so you have to add your OTA 'programmer' configuration into the existing programmers.txt file. Then restart the IDE.
Example OTA 'programmer' configuration in programmers.txt:
```
arduinoOTA104.name=Arduino OTA (192.168.1.104)
arduinoOTA104.program.tool=arduinoOTA
arduinoOTA104.ip=192.168.1.104
```
In IDE select in Tools menu the "Arduino OTA (...)" programmer and use "Upload using programmer" from the Sketch menu in IDE.

Saverio Sbrana

unread,
Apr 21, 2020, 12:10:38 PM4/21/20
to souliss-it
Ciao, souliss non modifica la libreria ethernet anzi la usa, infatti puoi usare la funzione 
Ethernet.begin(ip, gateway, subnet); senza problemi

da quello che vedo
~/arduino-1.8.8/hardware/tools/avr/bin/arduinoOTA -address 192.168.1.107 -port 65280 -username arduino -password password -sketch OTEthernet.spiffs.bin -upload /data -b
arduinoota usa un suo binario
prova a lanciarlo da riga di comando con lo sketch appena compilato e controlla eventuali errori

Saverio Sbrana

unread,
Apr 21, 2020, 12:16:21 PM4/21/20
to souliss-it
ps mi è appena venuto in mente,
io per programmare da remoto un'arduino mega ho collegato un'esp8266 in versione esp04 (molto piccola) con questo firmare https://github.com/jeelabs/esp-link e mi permette sia di flashare da remoto, sia di debuggare la seriale da interfaccia web

però ho dovuto flashare l'arduino mega con un diverso firmware (l'optiboot) che mi permette il flashing da remoto
te l'hai già modificato?

Lucio Pastore

unread,
Apr 22, 2020, 7:08:27 AM4/22/20
to souliss-it
Sì ho dovuto modificarlo anche io. Stasera se riesco faccio un'ulteriore prova. Grazie mille.

Lucio Pastore

unread,
Oct 11, 2020, 1:58:58 PM10/11/20
to souliss-it
Buona serata a tutti. Stò riprendendo l'analisi per implementare OTA anche per la scheda Mega... Qualcuno ha per caso implementato qualcosa?

Lucio Pastore

unread,
Nov 19, 2020, 10:38:44 PM11/19/20
to souliss-it
Buona serata a tutti, sto smanettando un poco per cercare di far funzionare la cosa...

Allo stato attuale ho verificato che OTA per la scheda Mega funziona a partire dalla libreria Ethernet 1.1.0 di arduino. Il primo motivo è che in questa libreria è implementato il metodo beginMulticast. 
Ho quindi sostituito la libreria originale del framework Souliss per le comunicazioni Etherner con una versione elaborata dalla libreria 1.1.2 adatta a Souliss.
Ora l'ide di arduino mostra tra le porte per la programmazione il device; quando però avvio la programmazione, dopo la connessione  ho problemi di caricamento. Ho notato che souliss è stato elaborato a partire da una vecchia libreria w5x00 una vecchia libreria mentre la libreria ethernet ufficiale si basa su una libreria w5100... Potrebbe essere necessario aggiornarla? Qualcuno sà come funziona?

Se qualcuno è interessato può dare una occhiata alla libreria modificata nella cartella zippata in allegato. Ho allegato anche la libreria di partenza che ho modificato per adattarla a souliss.

  Buona serata a tutti
Ethernet-1.1.2.zip
ethW5x00.7z

Lucio Pastore

unread,
Nov 23, 2020, 1:05:19 AM11/23/20
to souliss-it
Buona giornata a tutti. 

Dopo diversi tentativi stò per gettare la spugna...
Vorrei però tentare un approccio diverso. Vorrei prendendo ad esempio il codice per esp8266 ed esp32 creare una nuova configurazione che utilizzi il Media 1/3, la libreria ethernet  standard e la nuova libreria w5000... E' una strada praticabile?
Che ne dite?

Ciao



Lucio Pastore

unread,
Nov 25, 2020, 1:39:46 PM11/25/20
to souliss-it
Ciao a tutti. Habemus papam!!!

Sono riuscito ad aggiornare la libreria Ethernet di Souliss alla versione 1.12 ed il relativo driver VNET per w5100!!! Ora riesco ad effettuare l'upload tramite IDE su Arduino Mega con firmware Optiboot scritto mediante programmatore ISP (Un altro arduino).
Per ora sto testando il classico file di esempio con indirizzo statico (come da mè normalmente utilizzato. Nei prossimi giorni proverò una istallazione reale. Il driver W5x00 originale accorpava il w5100 e il w5200. La libreria da cui sono partito era esclusivamente per w5100... Spero di aver fatto tutto correttamente ma non ho modo di testare un nodo equipaggiato con W5200.
Allego lo scketch e la libreria Souliss modificata. I fileaggiornati li trovate in tre versioni: quella operativa, quella ... old e quella ...112.

Ciao a tutti

/**************************************************************************
    Souliss - Hello World
    
    This is the basic example, control one LED via a push-button or Android
    using SoulissApp (get it from Play Store).  
    
    Run this code on one of the following boards:
      - Arduino with ENC28J60 Ethernet Shield
        
***************************************************************************/

// Let the IDE point to the Souliss framework
#include "SoulissFramework.h"

// Configure the framework
#include "bconf/StandardArduino.h"          // Use a standard Arduino
#include "conf/ethW5100.h"               // Ethernet through Wiznet W5100
#include "conf/Gateway.h"                   // The main node is the Gateway, we have just one node
#include "conf/Webhook.h" //Richiama la configurazione speciale Ethernet ed UDP per Souliss

// Include framework code and libraries
#include <SPI.h>

/*** All configuration includes should be above this line ***/ 
#include "Souliss.h"
#include <ArduinoOTA.h>

// This identify the number of the LED logic
#define MYLEDLOGIC          0               

// Define the network configuration according to your router settings
uint8_t ip_address[4]  = {192, 168, 1, 120};
uint8_t subnet_mask[4] = {255, 255, 255, 0};
uint8_t ip_gateway[4]  = {192, 168, 1, 1};
#define myvNet_address  ip_address[3]       // The last byte of the IP address (77) is also the vNet address
#define myvNet_subnet   0xFF00

void setup()
{   
    Initialize();

     // Set network parameters
    Souliss_SetIPAddress(ip_address, subnet_mask, ip_gateway);
    SetAsGateway(myvNet_address);                                   // Set this node as gateway for SoulissApp  
     
    Set_SimpleLight(MYLEDLOGIC);        // Define a simple LED light logic
    
    // We connect a pushbutton between 5V and pin2 with a pulldown resistor 
    // between pin2 and GND, the LED is connected to pin9 with a resistor to
    // limit the current amount
    pinMode(2, INPUT);                  // Hardware pulldown required
    pinMode(9, OUTPUT);                 // Power the LED 
    ArduinoOTA.begin(Ethernet.localIP(), "arduino", "password", InternalStorage);
}

void loop()
    // Here we start to play
    EXECUTEFAST() {                     
        UPDATEFAST();   
        
        FAST_50ms() {   // We process the logic and relevant input and output every 50 milliseconds
            DigIn(2, Souliss_T1n_ToggleCmd, MYLEDLOGIC);            // Use the pin2 as ON/OFF toggle command
            Logic_SimpleLight(MYLEDLOGIC);                          // Drive the LED as per command
            DigOut(9, Souliss_T1n_Coil, MYLEDLOGIC);                // Use the pin9 to give power to the LED according to the logic
        } 
              
        // Here we handle here the communication with Android, commands and notification
        // are automatically assigned to MYLEDLOGIC
        FAST_GatewayComms();                                        
        ArduinoOTA.poll();
    }
souliss 25-11-2020.zip

Luca Remigio

unread,
Nov 25, 2020, 2:07:50 PM11/25/20
to souli...@googlegroups.com
Complimenti!!! Ottimo lavoro! 

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "souliss-it" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a souliss-it+...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/souliss-it/bd2d849c-13aa-4298-893d-fd7ee8b25f82n%40googlegroups.com.

Di Maio, Dario

unread,
Nov 25, 2020, 2:34:38 PM11/25/20
to souliss-it
Complimenti

--

Saverio Sbrana

unread,
Nov 26, 2020, 10:01:28 AM11/26/20
to souliss-it
Ciao
complimentoni!
una domanda? hai usato questa libreria?

Lucio Pastore

unread,
Nov 26, 2020, 3:50:26 PM11/26/20
to souliss-it
Ciao a tutti.
Aspettate con i complimenti... devo ancora verificare se non ho introdotto bachi subdoli.

La libreria che ho utilizzato è esattamente quella. Ho però dovuto cambiare il bootloader dell'arduino Mega con la versione optiboot che è distribuita dallo stesso   jandrassy .

Ciao e buona serata. 

Lucio Pastore

unread,
Dec 6, 2020, 12:38:46 PM12/6/20
to souliss-it
Ragazzi buco nell'acqua!!!! Funziona la libreria arduino ota ma non riesco a far  funzionare più la comunicazione Souliss. E' tutto il pomeriggio che ci lavoro ma mi sà che devo rassegnarmi a girare casa con il portatile....
Reply all
Reply to author
Forward
0 new messages