#include #include #include #include const char* host = "esp8266-avrisp"; const char* ssid = "**********"; const char* pass = "**********"; const uint16_t port = 328; const uint8_t reset_pin = 5; ESP8266AVRISP avrprog(port, reset_pin); void setup() { Serial.begin(115200); Serial.println(""); Serial.println("Arduino AVR-ISP over TCP"); avrprog.setReset(false); // let the AVR run WiFi.begin(ssid, pass); while (WiFi.waitForConnectResult() != WL_CONNECTED); MDNS.begin(host); MDNS.addService("avrisp", "tcp", port); IPAddress local_ip = WiFi.localIP(); Serial.print("IP address: "); Serial.println(local_ip); Serial.println("Use your avrdude:"); Serial.print("avrdude -c arduino -p -P net:"); Serial.print(local_ip); Serial.print(":"); Serial.print(port); Serial.println(" -t # or -U ..."); // listen for avrdudes avrprog.begin(); } void loop() { static AVRISPState_t last_state = AVRISP_STATE_IDLE; AVRISPState_t new_state = avrprog.update(); if (last_state != new_state) { switch (new_state) { case AVRISP_STATE_IDLE: { Serial.printf("[AVRISP] now idle\r\n"); // Use the SPI bus for other purposes break; } case AVRISP_STATE_PENDING: { Serial.printf("[AVRISP] connection pending\r\n"); // Clean up your other purposes and prepare for programming mode break; } case AVRISP_STATE_ACTIVE: { Serial.printf("[AVRISP] programming mode\r\n"); // Stand by for completion break; } } last_state = new_state; } // Serve the client if (last_state != AVRISP_STATE_IDLE) { avrprog.serve(); } }