Use this forum to chat about hardware specific topics for the ESP8266 (peripherals, memory, clocks, JTAG, programming)

User avatar
By Qdeathstar
#49089 Posting it up.

OK, so the issue is I have a esp8266 breakout board that i am using for testing. I'd like to be able to program OTA because its faster. However, when try to upload OTA it says "upload done" in the arduino IDE, but the esp8266 appears to enter bootloader mode. Pressing the reset button on the esp8266 board doens't bring it back out of bootloader. It stays like that until i upload new code via serial.

I have used this with ESP12 modules that i've solderd on to PCBs in the pat without issue... but it doesnt seem to work on the huzzah breakout. Anyone familiar with this issue?
User avatar
By RichardS
#49120 Yes most ESP8266 Modules are the same, the only difference normally is pinout and how the bootloader operates, so as long as your able to load code, its most likely a software issue.

RichardS
User avatar
By Qdeathstar
#49148 I am pretty sure it is not a software issue.

Here is a schematic i am using using an esp12 module. It works with OTA programming.
https://snag.gy/Oh805l.jpg

The huzzah breakout board does not.

https://www.adafruit.com/product/2471

I have uploaded the same code to each board. After i upload, the huzza product will upload, but when it resets it resest into bootloader. With my own ESP, it resets into normal mode.

Code: Select all#include <Wire.h>
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
#include <Ticker.h>
#include <Button.h>
#include <Encoder.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Ticker tickerOSWatch;

IPAddress controller(192, 168, 0, 30);
IPAddress ip(192, 168, 0, 35);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);

WiFiServer TelnetServer(23);
WiFiClient TelnetClient;
WiFiUDP toController;

Adafruit_SSD1306 display(19);
#define encoderA 5
#define encoderB 4
#define encSw 13
#define SCL 14
#define SDA 12

Button select(encSw, true, true, 20);
Encoder navigation(encoderA, encoderB);

#define OSWATCH_RESET_TIME 100
static unsigned long last_loop;

char ssid[] = "gilchrest2";
char pass[] = "mike2323";
unsigned int localPort = 8888;


void ICACHE_RAM_ATTR osWatch(void) {
  unsigned long t = millis();
  unsigned long last_run = abs(t - last_loop);
  if (last_run >= (OSWATCH_RESET_TIME * 1000)) {
    TelnetClient.println("WatchDog Reset Activated");
    // save the hit here to eeprom or to rtc memory if needed
    ESP.restart();  // normal reboot
    //ESP.reset();  // hard reset
  }
}

long oldPosition = -999;

void setup(){
 Wire.begin(SDA, SCL);
 pinMode(encSw, INPUT_PULLUP);
 display.begin(0x78);
 display.clearDisplay();
 
tickerOSWatch.attach_ms(((OSWATCH_RESET_TIME / 3) * 1000), osWatch);
  Serial.begin(115200);
  Serial.println("Booting");
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, pass);
  WiFi.config(ip, gateway, subnet);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("Connection Failed! Rebooting...");
    delay(5000);
    ESP.restart();
  }

  // Port defaults to 8266
  // ArduinoOTA.setPort(8266);

  // Hostname defaults to esp8266-[ChipID]
  ArduinoOTA.setHostname("Front Switch");

  // No authentication by default
  // ArduinoOTA.setPassword((const char *)"123");

  ArduinoOTA.onStart([]() {
    Serial.println("Start");
  });
  ArduinoOTA.onEnd([]() {
    Serial.println("\nEnd");
  });
  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
    Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  });
  ArduinoOTA.onError([](ota_error_t error) {
    Serial.printf("Error[%u]: ", error);
    if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
    else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
    else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
    else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
    else if (error == OTA_END_ERROR) Serial.println("End Failed");
  });
  ArduinoOTA.begin();
  Serial.println("Ready");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  TelnetServer.begin();
  toController.begin(4525);
  TelnetServer.setNoDelay(true);
  display.setTextSize(2);
 display.setTextColor(WHITE);
 display.setCursor(0,0);
 display.println("LOADINGS..");
 display.display();
 delay(1000);

 display.clearDisplay();
 display.setCursor(0,0);
 display.println(" 12345678 ");
 display.display();
}

void loop(){
  last_loop = millis();
  ArduinoOTA.handle();
  if(!TelnetClient) {
    TelnetClient = TelnetServer.available();
  }
  select.read();
  if(select.wasPressed()){
    TelnetClient.println("Button Pressed");
  }

  long newPosition = navigation.read();
  if (newPosition != oldPosition) {
    oldPosition = newPosition;
    TelnetClient.print("Encoder Position: ");
    TelnetClient.println(newPosition);
  }

 if(newPosition < 0){
  navigation.write(90);
 }
 if(newPosition > 90){
  navigation.write(0);
 }
 if(newPosition < 10){
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println(" ");
  display.drawLine(11, 0, 11, 15, WHITE);
  display.setTextColor(BLACK, WHITE);
  display.setCursor(12,0);
  display.println("1");
  display.setTextColor(WHITE);
  display.setCursor(24,0);
  display.println("2345678 ");
  display.display();
 }

else if(newPosition < 20){
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println(" 1");
  display.setTextColor(BLACK, WHITE);
  display.setCursor(24,0);
  display.println("2");
  display.drawLine(23, 0, 23, 15, WHITE);
  display.setTextColor(WHITE);
  display.setCursor(36,0);
  display.println("345678 ");
  display.display();
 }

 else if(newPosition < 30){
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println(" 12");
  display.setTextColor(BLACK, WHITE);
  display.setCursor(36,0);
  display.println("3");
  display.drawLine(35, 0, 35, 15, WHITE);
  display.setTextColor(WHITE);
  display.setCursor(48,0);
  display.println("45678 ");
  display.display();
 }
 else if(newPosition < 40){
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println(" 123");
  display.setTextColor(BLACK, WHITE);
  display.setCursor(48,0);
  display.println("4");
  display.drawLine(47, 0, 47, 15, WHITE);
  display.setTextColor(WHITE);
  display.setCursor(60,0);
  display.println("5678 ");
  display.display();
 }
 else if(newPosition < 50){
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println(" 1234");
  display.setTextColor(BLACK, WHITE);
  display.setCursor(60,0);
  display.println("5");
  display.drawLine(59, 0, 59, 15, WHITE);
  display.setTextColor(WHITE);
  display.setCursor(72,0);
  display.println("678 ");
  display.display();
 }
 else if(newPosition < 60){
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println(" 12345");
  display.setTextColor(BLACK, WHITE);
  display.setCursor(72,0);
  display.println("6");
  display.drawLine(71, 0, 71, 14, WHITE);
  display.setTextColor(WHITE);
  display.setCursor(84  ,0);
  display.println("78 ");
  display.display();
 }
 else if(newPosition < 70){
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println(" 123456");
  display.setTextColor(BLACK, WHITE);
  display.setCursor(76,0);
  display.println("7");
  display.drawLine(75, 0, 75, 14, WHITE);
  display.setTextColor(WHITE);
  display.setCursor(89,0);
  display.println("8 ");
  display.display();
 }
 else if(newPosition < 80){
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println(" 1234567");
  display.setTextColor(BLACK, WHITE);
  display.setCursor(86,0);
  display.println("2");
  display.drawLine(85, 0, 85, 14, WHITE);
  display.setTextColor(WHITE);
  display.setCursor(99,0);
  display.println(" ");
  display.display();
 }
}