diff --git a/Makefile b/Makefile index 4138886..702fc8d 100644 --- a/Makefile +++ b/Makefile @@ -84,7 +84,7 @@ ESPBAUD ?= 460800 # --------------- chipset configuration --------------- -# Pick your flash size: "512KB", "1MB", or "4MB" +# Pick your flash size: "512KB", "1MB", "2MB" or "4MB" FLASH_SIZE ?= 4MB # The pin assignments below are used when the settings in flash are invalid, they @@ -135,13 +135,12 @@ YUI_COMPRESSOR ?= yuicompressor-2.4.8.jar HTML_PATH = $(abspath ./html)/ WIFI_PATH = $(HTML_PATH)wifi/ -ESP_FLASH_MAX ?= 503808 # max bin file - ifeq ("$(FLASH_SIZE)","512KB") # Winbond 25Q40 512KB flash, typ for esp-01 thru esp-11 ESP_SPI_SIZE ?= 0 # 0->512KB (256KB+256KB) ESP_FLASH_MODE ?= 0 # 0->QIO ESP_FLASH_FREQ_DIV ?= 0 # 0->40Mhz +ESP_FLASH_MAX ?= 241664 # max bin file for 512KB flash: 236KB ET_FS ?= 4m # 4Mbit flash size in esptool flash command ET_FF ?= 40m # 40Mhz flash speed in esptool flash command ET_BLANK ?= 0x7E000 # where to flash blank.bin to erase wireless settings @@ -151,6 +150,7 @@ else ifeq ("$(FLASH_SIZE)","1MB") ESP_SPI_SIZE ?= 2 # 2->1MB (512KB+512KB) ESP_FLASH_MODE ?= 0 # 0->QIO ESP_FLASH_FREQ_DIV ?= 15 # 15->80MHz +ESP_FLASH_MAX ?= 503808 # max bin file for 1MB flash: 492KB ET_FS ?= 8m # 8Mbit flash size in esptool flash command ET_FF ?= 80m # 80Mhz flash speed in esptool flash command ET_BLANK ?= 0xFE000 # where to flash blank.bin to erase wireless settings @@ -163,6 +163,7 @@ else ifeq ("$(FLASH_SIZE)","2MB") ESP_SPI_SIZE ?= 4 # 6->4MB (1MB+1MB) or 4->4MB (512KB+512KB) ESP_FLASH_MODE ?= 0 # 0->QIO, 2->DIO ESP_FLASH_FREQ_DIV ?= 15 # 15->80Mhz +ESP_FLASH_MAX ?= 503808 # max bin file for 2MB flash: 492KB ET_FS ?= 16m # 16Mbit flash size in esptool flash command ET_FF ?= 80m # 80Mhz flash speed in esptool flash command ET_BLANK ?= 0x1FE000 # where to flash blank.bin to erase wireless settings @@ -175,6 +176,8 @@ else ESP_SPI_SIZE ?= 4 # 6->4MB (1MB+1MB) or 4->4MB (512KB+512KB) ESP_FLASH_MODE ?= 0 # 0->QIO, 2->DIO ESP_FLASH_FREQ_DIV ?= 15 # 15->80Mhz +ESP_FLASH_MAX ?= 503808 # max bin file for 512KB flash partition: 492KB +#ESP_FLASH_MAX ?= 1028096 # max bin file for 1MB flash partition: 1004KB ET_FS ?= 32m # 32Mbit flash size in esptool flash command ET_FF ?= 80m # 80Mhz flash speed in esptool flash command ET_BLANK ?= 0x3FE000 # where to flash blank.bin to erase wireless settings @@ -187,12 +190,17 @@ endif # Steps to release: create release on github, git pull, git describe --tags to verify you're # on the release tag, make release, upload esp-link.tgz into the release files #VERSION ?= "esp-link custom version" -DATE := $(shell date '+%F %T') +DATE := $(shell date '+%F') +TIME := $(shell date '+%T') BRANCH ?= $(shell if git diff --quiet HEAD; then git describe --tags; \ else git symbolic-ref --short HEAD; fi) SHA := $(shell if git diff --quiet HEAD; then git rev-parse --short HEAD | cut -d"/" -f 3; \ else echo "development"; fi) -VERSION ?=esp-link $(BRANCH) - $(DATE) - $(SHA) +VERSION ?=esp-link $(BRANCH) - $(DATE) - $(TIME) - $(SHA) + +BUILD_NUMBER_FILE = $(abspath ./build-number.txt) +BUILD_NUMBER_SRC = $(abspath ./user/buildnum.c) +BUILD_NUMBER := $(shell if ! test -f $(BUILD_NUMBER_FILE); then echo 1 > $(BUILD_NUMBER_FILE); fi; cat $(BUILD_NUMBER_FILE)) # Output directors to store intermediate compiled files # relative to the project directory @@ -227,15 +235,15 @@ MODULES += $(foreach sdir,$(LIBRARIES_DIR),$(wildcard $(sdir)/*)) EXTRA_INCDIR = include . # libraries used in this project, mainly provided by the SDK -LIBS = c gcc hal phy pp net80211 wpa main lwip crypto +LIBS = c gcc hal phy pp net80211 wpa main lwip crypto ssl # compiler flags using during compilation of source files -CFLAGS += -Os -ggdb -std=c99 -Werror -Wpointer-arith -Wundef -Wall -Wl,-EL -fno-inline-functions \ +CFLAGS += -Os -ggdb -std=c99 -Werror -Wno-unused-value -Wpointer-arith -Wundef -Wall -Wl,-EL -fno-inline-functions \ -nostdlib -mlongcalls -mtext-section-literals -ffunction-sections -fdata-sections \ -D__ets__ -DICACHE_FLASH -Wno-address -DFIRMWARE_SIZE=$(ESP_FLASH_MAX) \ -DMCU_RESET_PIN=$(MCU_RESET_PIN) -DMCU_ISP_PIN=$(MCU_ISP_PIN) \ -DLED_CONN_PIN=$(LED_CONN_PIN) -DLED_SERIAL_PIN=$(LED_SERIAL_PIN) \ - -DVERSION="$(VERSION)" + -DVERSION="$(VERSION)" -DBUILD_DATE="$(DATE)" -DBUILD_TIME="$(TIME)" -DBUILD_NUM="$(BUILD_NUMBER)" # linker flags used to generate the main object file LDFLAGS = -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static -Wl,--gc-sections @@ -343,13 +351,23 @@ all: echo_version checkdirs $(FW_BASE)/user1.bin $(FW_BASE)/user2.bin echo_version: @echo VERSION: $(VERSION) +# Create an auto-incrementing build number. + @echo "#define VER_STR2(V) #V" > $(BUILD_NUMBER_SRC) + @echo "#define VER_STR(V) VER_STR2(V)" >> $(BUILD_NUMBER_SRC) + @echo "char esp_link_version[] = VER_STR(VERSION);" >> $(BUILD_NUMBER_SRC) + @echo "char esp_link_date[] = VER_STR(BUILD_DATE);" >> $(BUILD_NUMBER_SRC) + @echo "char esp_link_time[] = VER_STR(BUILD_TIME);" >> $(BUILD_NUMBER_SRC) + @echo "char esp_link_build[] = VER_STR(BUILD_NUM);" >> $(BUILD_NUMBER_SRC) + +# Build number file. Increment if firmware file changes +$(BUILD_NUMBER_FILE): $(USER1_OUT) + @if ! test -f $(BUILD_NUMBER_FILE); then echo 0 > $(BUILD_NUMBER_FILE); fi + @echo $$(($$(cat $(BUILD_NUMBER_FILE)) + 1)) > $(BUILD_NUMBER_FILE) $(USER1_OUT): $(APP_AR) $(LD_SCRIPT1) $(vecho) "LD $@" $(Q) $(LD) -L$(SDK_LIBDIR) -T$(LD_SCRIPT1) $(LDFLAGS) -Wl,--start-group $(LIBS) $(APP_AR) -Wl,--end-group -o $@ - @echo Dump : $(OBJDP) -x $(USER1_OUT) - @echo Disass: $(OBJDP) -d -l -x $(USER1_OUT) -# $(Q) $(OBJDP) -x $(TARGET_OUT) | egrep espfs_img + $(Q) $(OBJDP) -S $(USER1_OUT) > $(addprefix $(BUILD_BASE)/,$(TARGET).dump) $(USER2_OUT): $(APP_AR) $(LD_SCRIPT2) $(vecho) "LD $@" @@ -360,16 +378,15 @@ $(FW_BASE): $(vecho) "FW $@" $(Q) mkdir -p $@ -$(FW_BASE)/user1.bin: $(USER1_OUT) $(FW_BASE) +$(FW_BASE)/user1.bin: $(USER1_OUT) $(FW_BASE) $(BUILD_NUMBER_FILE) $(Q) $(OBJCP) --only-section .text -O binary $(USER1_OUT) eagle.app.v6.text.bin $(Q) $(OBJCP) --only-section .data -O binary $(USER1_OUT) eagle.app.v6.data.bin $(Q) $(OBJCP) --only-section .rodata -O binary $(USER1_OUT) eagle.app.v6.rodata.bin $(Q) $(OBJCP) --only-section .irom0.text -O binary $(USER1_OUT) eagle.app.v6.irom0text.bin - ls -ls eagle*bin $(Q) COMPILE=gcc PATH=$(XTENSA_TOOLS_ROOT):$(PATH) python $(APPGEN_TOOL) $(USER1_OUT) 2 $(ESP_FLASH_MODE) $(ESP_FLASH_FREQ_DIV) $(ESP_SPI_SIZE) 0 $(Q) rm -f eagle.app.v6.*.bin $(Q) mv eagle.app.flash.bin $@ - @echo "** user1.bin uses $$(stat -c '%s' $@) bytes of" $(ESP_FLASH_MAX) "available" + @echo "** user1.bin uses $$(stat -c '%s' $@) bytes of" $(ESP_FLASH_MAX) "available =" $(shell expr $$(stat -c '%s' $@) \* 100 / $(ESP_FLASH_MAX) ) "%" $(Q) if [ $$(stat -c '%s' $@) -gt $$(( $(ESP_FLASH_MAX) )) ]; then echo "$@ too big!"; false; fi $(FW_BASE)/user2.bin: $(USER2_OUT) $(FW_BASE) @@ -410,60 +427,55 @@ tools/$(HTML_COMPRESSOR): else tools/$(HTML_COMPRESSOR): $(Q) mkdir -p tools - cd tools; wget https://github.com/yui/yuicompressor/releases/download/v2.4.8/$(YUI_COMPRESSOR) - cd tools; wget https://htmlcompressor.googlecode.com/files/$(HTML_COMPRESSOR) + $(Q) if ! test -f tools/$(YUI_COMPRESSOR); then wget https://github.com/yui/yuicompressor/releases/download/v2.4.8/$(YUI_COMPRESSOR) -O tools/$(YUI_COMPRESSOR); fi + $(Q) if ! test -f tools/$(HTML_COMPRESSOR); then wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/htmlcompressor/$(HTML_COMPRESSOR) -O tools/$(HTML_COMPRESSOR); fi endif ifeq ("$(COMPRESS_W_HTMLCOMPRESSOR)","yes") $(BUILD_BASE)/espfs_img.o: tools/$(HTML_COMPRESSOR) endif -$(BUILD_BASE)/espfs_img.o: html/ html/wifi/ espfs/mkespfsimage/mkespfsimage - $(Q) rm -rf html_compressed; mkdir html_compressed; mkdir html_compressed/wifi; - $(Q) cp -r html/*.ico html_compressed; - $(Q) cp -r html/*.css html_compressed; - $(Q) cp -r html/*.js html_compressed; - $(Q) cp -r html/wifi/*.png html_compressed/wifi; - $(Q) cp -r html/wifi/*.js html_compressed/wifi; +$(BUILD_BASE)/espfs_img.o: $(shell find html) espfs/mkespfsimage/mkespfsimage + $(Q) rm -rf html_compressed; mkdir -p html_compressed; cp -r html/* html_compressed; ifeq ("$(COMPRESS_W_HTMLCOMPRESSOR)","yes") - $(Q) echo "Compression assets with htmlcompressor. This may take a while..." - $(Q) java -jar tools/$(HTML_COMPRESSOR) \ - -t html --remove-surrounding-spaces max --remove-quotes --remove-intertag-spaces \ - -o $(abspath ./html_compressed)/ \ - $(HTML_PATH)head- \ - $(HTML_PATH)*.html - $(Q) java -jar tools/$(HTML_COMPRESSOR) \ - -t html --remove-surrounding-spaces max --remove-quotes --remove-intertag-spaces \ - -o $(abspath ./html_compressed)/wifi/ \ - $(WIFI_PATH)*.html - $(Q) echo "Compression assets with yui-compressor. This may take a while..." + $(Q) echo "Compression assets with htmlcompressor. This is fast..." + $(Q) for file in `find html_compressed -type f -name "*.html"`; do \ + java -jar yui/$(HTML_COMPRESSOR) \ + -t html --remove-surrounding-spaces max --remove-quotes --remove-intertag-spaces \ + -o $$file $$file; \ + done + $(Q) echo "Compressing JS/CSS with yui-compressor. This may take a while..." $(Q) for file in `find html_compressed -type f -name "*.js"`; do \ - java -jar tools/$(YUI_COMPRESSOR) $$file --line-break 0 -o $$file; \ + java -jar yui/$(YUI_COMPRESSOR) $$file --line-break 0 -o $$file; \ done $(Q) for file in `find html_compressed -type f -name "*.css"`; do \ - java -jar tools/$(YUI_COMPRESSOR) $$file -o $$file; \ - done -else - $(Q) cp -r html/head- html_compressed; - $(Q) cp -r html/*.html html_compressed; - $(Q) cp -r html/wifi/*.html html_compressed/wifi; + java -jar yui/$(YUI_COMPRESSOR) $$file -o $$file; \ + done endif ifeq (,$(findstring mqtt,$(MODULES))) $(Q) rm -rf html_compressed/mqtt.html $(Q) rm -rf html_compressed/mqtt.js endif - $(Q) for file in `find html_compressed -type f -name "*.htm*"`; do \ - cat html_compressed/head- $$file >$${file}-; \ - mv $$file- $$file; \ - done - $(Q) rm html_compressed/head- + $(Q) echo "Now building espFS ..." $(Q) cd html_compressed; find . \! -name \*- | ../espfs/mkespfsimage/mkespfsimage > ../build/espfs.img; cd ..; - $(Q) ls -sl build/espfs.img + @echo "espFS image is $$(stat -c '%s' build/espfs.img) bytes =" $(shell expr $$(stat -c '%s' build/espfs.img) \* 100 / $$(du -sb html_compressed | { read first _ ; echo $$first; })) "% of uncompressed originals" $(Q) cd build; $(OBJCP) -I binary -O elf32-xtensa-le -B xtensa --rename-section .data=.espfs \ - espfs.img espfs_img.o; cd .. + espfs.img espfs_img.o; cd .. # edit the loader script to add the espfs section to the end of irom with a 4 byte alignment. # we also adjust the sizes of the segments 'cause we need more irom0 +# in the end the only thing that matters wrt size is that the whole shebang fits into the +# 236KB available (in a 512KB flash) +ifeq ("$(FLASH_SIZE)","512KB") +build/eagle.esphttpd1.v6.ld: $(SDK_LDDIR)/eagle.app.v6.new.512.app1.ld + $(Q) sed -e '/\.irom\.text/{' -e 'a . = ALIGN (4);' -e 'a *(.espfs)' -e '}' \ + -e '/^ irom0_0_seg/ s/2B000/38000/' \ + $(SDK_LDDIR)/eagle.app.v6.new.512.app1.ld >$@ +build/eagle.esphttpd2.v6.ld: $(SDK_LDDIR)/eagle.app.v6.new.512.app2.ld + $(Q) sed -e '/\.irom\.text/{' -e 'a . = ALIGN (4);' -e 'a *(.espfs)' -e '}' \ + -e '/^ irom0_0_seg/ s/2B000/38000/' \ + $(SDK_LDDIR)/eagle.app.v6.new.512.app2.ld >$@ +else build/eagle.esphttpd1.v6.ld: $(SDK_LDDIR)/eagle.app.v6.new.1024.app1.ld $(Q) sed -e '/\.irom\.text/{' -e 'a . = ALIGN (4);' -e 'a *(.espfs)' -e '}' \ -e '/^ irom0_0_seg/ s/6B000/7C000/' \ @@ -472,8 +484,9 @@ build/eagle.esphttpd2.v6.ld: $(SDK_LDDIR)/eagle.app.v6.new.1024.app2.ld $(Q) sed -e '/\.irom\.text/{' -e 'a . = ALIGN (4);' -e 'a *(.espfs)' -e '}' \ -e '/^ irom0_0_seg/ s/6B000/7C000/' \ $(SDK_LDDIR)/eagle.app.v6.new.1024.app2.ld >$@ +endif -espfs/mkespfsimage/mkespfsimage: espfs/mkespfsimage/ +espfs/mkespfsimage/mkespfsimage: espfs/mkespfsimage/*.c $(Q) $(MAKE) -C espfs/mkespfsimage GZIP_COMPRESSION="$(GZIP_COMPRESSION)" release: all diff --git a/esp-link/cgi.c b/esp-link/cgi.c index 96c03e9..20e7d2e 100644 --- a/esp-link/cgi.c +++ b/esp-link/cgi.c @@ -27,10 +27,11 @@ void ICACHE_FLASH_ATTR noCacheHeaders(HttpdConnData *connData, int code) { httpdStartResponse(connData, code); httpdHeader(connData, "Cache-Control", "no-cache, no-store, must-revalidate"); httpdHeader(connData, "Pragma", "no-cache"); - httpdHeader(connData, "Expires", "0"); + httpdHeader(connData, "Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); } void ICACHE_FLASH_ATTR jsonHeader(HttpdConnData *connData, int code) { + httpdStartResponse(connData, code); noCacheHeaders(connData, code); httpdHeader(connData, "Content-Type", "application/json"); httpdEndHeaders(connData); @@ -187,8 +188,6 @@ int ICACHE_FLASH_ATTR printGlobalInfo(char *buff, int buflen, char *token) { } #endif -extern char *esp_link_version; // in user_main.c - int ICACHE_FLASH_ATTR cgiMenu(HttpdConnData *connData) { if (connData->conn==NULL) return HTTPD_CGI_DONE; // Connection aborted. Clean up. char buff[1024]; @@ -214,6 +213,7 @@ int ICACHE_FLASH_ATTR cgiMenu(HttpdConnData *connData) { "\"REST/MQTT\", \"/mqtt.html\", " #endif "\"Debug log\", \"/log.html\"" + "\"Firmware\", \"/flash/flash.html\"" " ], " "\"version\": \"%s\", " "\"name\": \"%s\"" diff --git a/esp-link/cgiflash.c b/esp-link/cgiflash.c index 4b9277d..937ed10 100644 --- a/esp-link/cgiflash.c +++ b/esp-link/cgiflash.c @@ -57,11 +57,11 @@ int ICACHE_FLASH_ATTR cgiGetFirmwareNext(HttpdConnData *connData) { } uint8 id = system_upgrade_userbin_check(); - httpdStartResponse(connData, 200); + noCacheHeaders(connData, 200); httpdHeader(connData, "Content-Type", "text/plain"); httpdHeader(connData, "Content-Length", "9"); httpdEndHeaders(connData); - char *next = id == 1 ? "user1.bin" : "user2.bin"; + char *next = (id == 1 ? "user1.bin" : "user2.bin"); httpdSend(connData, next, -1); DBG("Next firmware: %s (got %d)\n", next, id); return HTTPD_CGI_DONE; @@ -124,7 +124,7 @@ int ICACHE_FLASH_ATTR cgiUploadFirmware(HttpdConnData *connData) { // erase next flash block if necessary if (address % SPI_FLASH_SEC_SIZE == 0){ - DBG("Flashing 0x%05x (id=%d)\n", address, 2 - id); + DBG("Flashing 0x%05X (id=%d)\n", address, 2 - id); spi_flash_erase_sector(address/SPI_FLASH_SEC_SIZE); } diff --git a/esp-link/cgiwifi.c b/esp-link/cgiwifi.c index afb6223..8aeea73 100644 --- a/esp-link/cgiwifi.c +++ b/esp-link/cgiwifi.c @@ -732,8 +732,8 @@ int ICACHE_FLASH_ATTR printWifiInfo(char *buff) { if (rssi > 0) rssi = 0; uint8 mac_addr[6]; uint8 apmac_addr[6]; - wifi_get_macaddr(0, mac_addr); - wifi_get_macaddr(1, apmac_addr); + wifi_get_macaddr(STATION_IF, mac_addr); + wifi_get_macaddr(SOFTAP_IF, apmac_addr); uint8_t chan = wifi_get_channel(); len = os_sprintf(buff, diff --git a/esp-link/main.c b/esp-link/main.c index 49a228a..6fbef41 100644 --- a/esp-link/main.c +++ b/esp-link/main.c @@ -64,6 +64,8 @@ should be placed above the URLs they protect. HttpdBuiltInUrl builtInUrls[] = { { "/", cgiRedirect, "/home.html" }, { "/menu", cgiMenu, NULL }, + {"/flash", cgiRedirect, "/flash/flash.html"}, + {"/flash/", cgiRedirect, "/flash/flash.html"}, { "/flash/next", cgiGetFirmwareNext, NULL }, { "/flash/upload", cgiUploadFirmware, NULL }, { "/flash/reboot", cgiRebootFirmware, NULL }, @@ -107,10 +109,6 @@ static void ICACHE_FLASH_ATTR prHeapTimerCb(void *arg) { } #endif -# define VERS_STR_STR(V) #V -# define VERS_STR(V) VERS_STR_STR(V) -char* esp_link_version = VERS_STR(VERSION); - // address of espfs binary blob extern uint32_t _binary_espfs_img_start; @@ -139,7 +137,7 @@ void user_init(void) { logInit(); // must come after init of uart // Say hello (leave some time to cause break in TX after boot loader's msg os_delay_us(10000L); - os_printf("\n\n** %s\n", esp_link_version); + os_printf("\n\n** %s, build %s\n", esp_link_version, esp_link_build); os_printf("Flash config restore %s\n", restoreOk ? "ok" : "*FAILED*"); // Status LEDs statusInit(); @@ -162,26 +160,26 @@ void user_init(void) { #endif struct rst_info *rst_info = system_get_rst_info(); - NOTICE("Reset cause: %d=%s", rst_info->reason, rst_codes[rst_info->reason]); - NOTICE("exccause=%d epc1=0x%x epc2=0x%x epc3=0x%x excvaddr=0x%x depc=0x%x", + NOTICE("Reset cause: %d=%s\n", rst_info->reason, rst_codes[rst_info->reason]); + NOTICE("exccause=%d epc1=0x%x epc2=0x%x epc3=0x%x excvaddr=0x%x depc=0x%x\n", rst_info->exccause, rst_info->epc1, rst_info->epc2, rst_info->epc3, rst_info->excvaddr, rst_info->depc); uint32_t fid = spi_flash_get_id(); - NOTICE("Flash map %s, manuf 0x%02X chip 0x%04X", flash_maps[system_get_flash_size_map()], + NOTICE("Flash map %s, manuf 0x%02X chip 0x%04X\n", flash_maps[system_get_flash_size_map()], fid & 0xff, (fid&0xff00)|((fid>>16)&0xff)); - NOTICE("** %s: ready, heap=%ld", esp_link_version, (unsigned long)system_get_free_heap_size()); + NOTICE("** %s: ready, heap=%ld\n", esp_link_version, (unsigned long)system_get_free_heap_size()); // Init SNTP service cgiServicesSNTPInit(); #ifdef MQTT if (flashConfig.mqtt_enable) { - NOTICE("initializing MQTT"); + NOTICE("initializing MQTT\n"); mqtt_client_init(); } #endif - NOTICE("initializing user application"); + NOTICE("initializing user application\n"); app_init(); - NOTICE("Waiting for work to do..."); + NOTICE("Waiting for work to do...\n"); #ifdef MEMLEAK_DEBUG system_show_malloc(); #endif diff --git a/html/console.html b/html/console.html index d84da72..119300a 100644 --- a/html/console.html +++ b/html/console.html @@ -1,25 +1,38 @@ + +
+Hostname |
-
-
-
-
- Click to edit!
- Hostname displayed in menu bar - and used by DHCP and mDNS |
Network SSID | |
WiFi status | |
WiFi address | |
SLIP status | |
MQTT status | |
Serial baud |
The JeeLabs esp-link firmware bridges the ESP8266 - serial port to WiFi and can - program microcontrollers over the serial port, in particular Arduinos, AVRs, and - NXP's LPC800 and other ARM processors. Typical avrdude command line to - program an Arduino:
-where -Pnet:esp-link.local:23 tells avrdude to connect to port 23 of esp-link. - You can substitute the IP address of your esp-link for esp-link.local if necessary. - Please refer to - the online README - for up-to-date help.
+Hostname |
+
+
+
+
+ Click to edit!
+ Hostname displayed in menu bar + and used by DHCP and mDNS |
Network SSID | |
WiFi status | |
WiFi address | |
SLIP status | |
MQTT status | |
Serial baud |
The JeeLabs esp-link firmware bridges the ESP8266 + serial port to WiFi and can + program microcontrollers over the serial port, in particular Arduinos, AVRs, and + NXP's LPC800 and other ARM processors. Typical avrdude command line to + program an Arduino:
+where -Pnet:esp-link.local:23 tells avrdude to connect to port 23 of esp-link. + You can substitute the IP address of your esp-link for esp-link.local if necessary. + Please refer to + the online README + for up-to-date help.
WiFi mode | |||||||||||||||
WiFi channel | |||||||||||||||
Flash chip ID |
+
+
+
-
- Common IDs: 4016=4MB, 4014=1MB, 4013=512KB
-
+
+ System details- -
+
+ Pin assignment+ +
+ | ||||||||||||||
Current partition | |||||||||||||||
Description: -
-
-
- Click to edit!
+ A short description or memo for this esp-link - module, 128 chars max +
+
+
+
+ Connect to µC reset pin for programming and reset-µC function
+
+
+
+
+ Second signal to program µC.
+ AVR:not used, esp8266:gpio2, ARM:ISP
+
+
+
+
+ LED to show WiFi connectivity
+
+
+
+
+ LED to show serial activity
+
+
+
+ Swap UART0 pins to avoid ROM boot message.
- Normal is + TX on gpio1/TX0 and RX on gpio3/RX0, swapped is TX on gpio15 and RX on gpio13. |
The debug log shows the most recent characters printed by the esp-link software itself to - its own debug log.
+The debug log shows the most recent characters printed by the ESP-LINK software itself to its own debug log.
@@ -23,38 +34,7 @@WiFi mode | |
Soft-AP SSID | |
Soft-AP Password | |
Soft-AP Channel | |
Soft-AP Max Conn | |
Soft-AP Hidden | |
Soft-AP Beacon Int | |
Soft-AP Auth Mode | |
Soft-AP MAC | |
WiFi mode | |
Soft-AP SSID | |
Soft-AP Password | |
Soft-AP Channel | |
Soft-AP Max Conn | |
Soft-AP Hidden | |
Soft-AP Beacon Interval | |
Soft-AP Auth Mode | |
Soft-AP MAC | |
WiFi mode | |
WiFi channel | |
Configured network | |
WiFi status | |
WiFi address | |
WiFi rssi | |
WiFi phy | |
WiFi MAC | |
WiFi mode | |
WiFi channel | |
Configured network | |
WiFi status | |
WiFi address | |
WiFi rssi | |
WiFi phy | |
WiFi MAC | |