Hi All,
Not exactly a newbie but definitely no expert. I want to try out Arduino OTA programming but even the basic example doesn't work.
The problem seems to be that although the code partially runs for the first time after an IDE upload, it does not run properly after that. The WiFi connects and I can ping the board but the contents of loop() does not execute. If I disconnect the USB and power the board from a powersupply then it is worse, the WiFi doesn't even connect and I cannot ping it any more.
It doesn't matter whether the serial monitor is enabled or not. Behaviour is the same either way.
It seems to get stuck in setup(). So I assume that library calls to 'OTAUpdate.h' are not completing and I would like to try an alternative. Especially since the bundled version of 'OTAUpdate.h' makes silly space invaders images appear on the LED matrix which I could do without. Maybe it's that graphics loop that is hanging the process? In any case I want to use the LED matrix for my own display.
Is there an alternative OTA library header file that I could use for the R4 WiFi? I've lloked but the others all seem specific to other hardware.
Thanks in advance,
Moo
Using IDE 2.3.2
BN: Ardiono UNO R4 WiFi
VID: 0x2341
PID: 0x1002
SN: F412FA70A064
Windows 11 Desktop
(I can't get Arduino cloud to do anything useful!)
/*
OTA
This sketch demonstrates how to make an OTA Update on the UNO R4 WiFi.
Upload the sketch and wait for the invasion!
*/
#include "WiFiS3.h"
#include "OTAUpdate.h"
#include "root_ca.h"
#include "arduino_secrets.h"
char ssid[] = SECRET_SSID; // your network SSID (name)
char pass[] = SECRET_PASS; // your network password (use for WPA, or use as key for WEP)
int status = WL_IDLE_STATUS;
OTAUpdate ota;
static char const OTA_FILE_LOCATION[] = "https://downloads.arduino.cc/ota/UNOR4WIFI_Animation.ota";
/* -------------------------------------------------------------------------- */
void setup() {
/* -------------------------------------------------------------------------- */
//Initialize serial and wait for port to open:
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
// check for the Wi-Fi module:
if (WiFi.status() == WL_NO_MODULE) {
Serial.println("Communication with Wi-Fi module failed!");
// don't continue
while (true);
}
String fv = WiFi.firmwareVersion();
if (fv < WIFI_FIRMWARE_LATEST_VERSION) {
Serial.println("Please upgrade the firmware");
}
// attempt to connect to Wi-Fi network:
while (status != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
status = WiFi.begin(ssid, pass);
// wait 1 seconds for connection:
delay(1000);
}
printWiFiStatus();
int ret = ota.begin("/update.bin");
if(ret != OTAUpdate::OTA_ERROR_NONE) {
Serial.println("ota.begin() error: ");
Serial.println((int)ret);
return;
}
ret = ota.setCACert(root_ca);
if(ret != OTAUpdate::OTA_ERROR_NONE) {
Serial.println("ota.setCACert() error: ");
Serial.println((int)ret);
return;
}
int ota_size = ota.download(OTA_FILE_LOCATION, "/update.bin");
if(ota_size <= 0) {
Serial.println("ota.download() error: ");
Serial.println(ota_size);
return;
}
ret = ota.verify();
if(ret != OTAUpdate::OTA_ERROR_NONE) {
Serial.println("ota.verify() error: ");
Serial.println((int)ret);
return;
}
ret = ota.update("/update.bin");
if(ret != OTAUpdate::OTA_ERROR_NONE) {
Serial.println("ota.update() error: ");
Serial.println((int)ret);
return;
}
}
/* -------------------------------------------------------------------------- */
void loop() {
/* -------------------------------------------------------------------------- */
// delay(1000);
}
/* -------------------------------------------------------------------------- */
void printWiFiStatus() {
/* -------------------------------------------------------------------------- */
// print the SSID of the network you're attached to:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
// print your board's IP address:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}