├── Documentation ├── ESP-WROOM-03_Specifications_EN_v1.pdf └── ESP32_Specifications_EN_v1.pdf ├── Firmware ├── Blink │ ├── Makefile │ ├── build │ │ ├── app.out │ │ ├── app_app.a │ │ └── user │ │ │ └── user_main.o │ ├── firmware │ │ ├── app.ota │ │ ├── irom0_flash.bin │ │ └── irom1.bin │ ├── include │ │ └── user_config.h │ └── user │ │ └── user_main.c └── Phant │ ├── Makefile │ ├── build │ ├── app.out │ ├── app_app.a │ ├── phant │ │ └── phant.o │ └── user │ │ └── user_main.o │ ├── firmware │ ├── app.ota │ ├── irom0_flash.bin │ └── irom1.bin │ ├── include │ └── user_config.h │ ├── phant │ ├── phant.c │ └── phant.h │ └── user │ └── user_main.c ├── Fritzing ├── ESP32 Module Testbed.fzpz └── example_hookup.fzz ├── Graphical Datasheet ├── esp-wroom-03_top.jpg ├── esp32-wroom-03-graphical-datasheet.pdf ├── esp32-wroom-03-graphical-datasheet.svg ├── esp32-wroom-03.csv ├── esp32-wroom-03.png ├── esp32-wroom-03.svg └── tagscript.py ├── Hardware └── esp32.lbr ├── Images ├── esp-wroom-03-development-board.jpg ├── esp-wroom-03_bottom.jpg ├── esp-wroom-03_top.jpg ├── esp32-block-diagram.png ├── esp32-breadboard-circuit-angle.jpg ├── esp32-breadboard-circuit-top.jpg └── esp32-wroom-03-graphical-datasheet.png ├── LICENSE.md └── README.md /Documentation/ESP-WROOM-03_Specifications_EN_v1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sparkfun/ESP32_Miscellany/a854269104a25ddc7c1e1849b14892d56f250e37/Documentation/ESP-WROOM-03_Specifications_EN_v1.pdf -------------------------------------------------------------------------------- /Documentation/ESP32_Specifications_EN_v1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sparkfun/ESP32_Miscellany/a854269104a25ddc7c1e1849b14892d56f250e37/Documentation/ESP32_Specifications_EN_v1.pdf -------------------------------------------------------------------------------- /Firmware/Blink/Makefile: -------------------------------------------------------------------------------- 1 | ############################################################# 2 | # 3 | # ESP32 Root Level Makefile 4 | # 5 | # Version 1.0 6 | # 7 | # (c) 2015 by CHERTS 8 | # 9 | ############################################################# 10 | 11 | BUILD_BASE = build 12 | FW_BASE = firmware 13 | 14 | # Base directory for the compiler 15 | XTENSA_TOOLS_ROOT ?= c:/Espressif/xtensa-esp108-elf/bin 16 | 17 | # base directory of the ESP32 SDK package, absolute 18 | SDK_BASE ?= c:/Espressif/ESP32_RTOS_SDK 19 | SDK_TOOLS ?= c:/Espressif/utils/ESP32 20 | 21 | # esptool path and port 22 | ESPTOOL ?= $(SDK_TOOLS)/esptool_esp32.exe 23 | ESPPORT ?= COM2 24 | # Baud rate for programmer 25 | BAUD ?= 256000 26 | 27 | # SPI_SPEED = 40, 26, 20, 80 28 | SPI_SPEED ?= 40 29 | # SPI_MODE: qio, qout, dio, dout 30 | SPI_MODE ?= qio 31 | # SPI_SIZE_MAP 32 | # 0 : 512 KB (256 KB + 256 KB) 33 | # 1 : 256 KB 34 | # 2 : 1024 KB (512 KB + 512 KB) 35 | # 3 : 2048 KB (512 KB + 512 KB) 36 | # 4 : 4096 KB (512 KB + 512 KB) 37 | # 5 : 2048 KB (1024 KB + 1024 KB) 38 | # 6 : 4096 KB (1024 KB + 1024 KB) 39 | #SPI_SIZE_MAP ?= 1 40 | #SPI_SIZE_MAP ?= 0 41 | SPI_SIZE_MAP ?= 1 42 | 43 | ifeq ($(SPI_SPEED), 26.7) 44 | freqdiv = 1 45 | flashimageoptions = -ff 26m 46 | else 47 | ifeq ($(SPI_SPEED), 20) 48 | freqdiv = 2 49 | flashimageoptions = -ff 20m 50 | else 51 | ifeq ($(SPI_SPEED), 80) 52 | freqdiv = 15 53 | flashimageoptions = -ff 80m 54 | else 55 | freqdiv = 0 56 | flashimageoptions = -ff 40m 57 | endif 58 | endif 59 | endif 60 | 61 | ifeq ($(SPI_MODE), QOUT) 62 | mode = 1 63 | flashimageoptions += -fm qout 64 | else 65 | ifeq ($(SPI_MODE), DIO) 66 | mode = 2 67 | flashimageoptions += -fm dio 68 | else 69 | ifeq ($(SPI_MODE), DOUT) 70 | mode = 3 71 | flashimageoptions += -fm dout 72 | else 73 | mode = 0 74 | flashimageoptions += -fm qio 75 | endif 76 | endif 77 | endif 78 | 79 | ifeq ($(SPI_SIZE_MAP), 1) 80 | size_map = 1 81 | flash = 256 82 | flashimageoptions += -fs 2m 83 | blankaddr = 0xFC000 84 | else 85 | ifeq ($(SPI_SIZE_MAP), 2) 86 | size_map = 2 87 | flash = 1024 88 | flashimageoptions += -fs 8m 89 | blankaddr = 0xFE000 90 | else 91 | ifeq ($(SPI_SIZE_MAP), 3) 92 | size_map = 3 93 | flash = 2048 94 | flashimageoptions += -fs 16m 95 | blankaddr = 0x1FE000 96 | else 97 | ifeq ($(SPI_SIZE_MAP), 4) 98 | size_map = 4 99 | flash = 4096 100 | flashimageoptions += -fs 32m 101 | blankaddr = 0x3FE000 102 | else 103 | ifeq ($(SPI_SIZE_MAP), 5) 104 | size_map = 5 105 | flash = 2048 106 | flashimageoptions += -fs 16m 107 | blankaddr = 0x1FE000 108 | else 109 | ifeq ($(SPI_SIZE_MAP), 6) 110 | size_map = 6 111 | flash = 4096 112 | flashimageoptions += -fs 32m 113 | blankaddr = 0x3FE000 114 | else 115 | size_map = 0 116 | flash = 512 117 | flashimageoptions += -fs 4m 118 | blankaddr = 0x7E000 119 | endif 120 | endif 121 | endif 122 | endif 123 | endif 124 | endif 125 | 126 | # name for the target project 127 | TARGET = app 128 | 129 | # which modules (subdirectories) of the project to include in compiling 130 | MODULES = user 131 | EXTRA_INCDIR = include $(SDK_BASE)/extra_include 132 | 133 | # libraries used in this project, mainly provided by the SDK 134 | LIBS = c gcc hal m crypto freertos lwip main net80211 phy pp rtc wpa driver 135 | 136 | # compiler flags using during compilation of source files 137 | CFLAGS = -Os -g -O2 -std=gnu90 -Wpointer-arith -Wundef -Werror -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -mno-serialize-volatile -D__ets__ -DICACHE_FLASH 138 | 139 | # linker flags used to generate the main object file 140 | LDFLAGS = -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static 141 | 142 | # linker script used for the above linkier step 143 | LD_SCRIPT = eagle.pro.v7.ld 144 | 145 | # various paths from the SDK used in this project 146 | SDK_LIBDIR = lib 147 | SDK_LDDIR = ld 148 | SDK_INCDIR = include include/espressif include/lwip include/lwip/ipv4 include/lwip/ipv6 driver_lib/include 149 | 150 | # select which tools to use as compiler, librarian and linker 151 | CC := $(XTENSA_TOOLS_ROOT)/xtensa-esp108-elf-gcc 152 | AR := $(XTENSA_TOOLS_ROOT)/xtensa-esp108-elf-ar 153 | LD := $(XTENSA_TOOLS_ROOT)/xtensa-esp108-elf-gcc 154 | OBJCOPY := $(XTENSA_TOOLS_ROOT)/xtensa-esp108-elf-objcopy 155 | OBJDUMP := $(XTENSA_TOOLS_ROOT)/xtensa-esp108-elf-objdump 156 | 157 | # no user configurable options below here 158 | SRC_DIR := $(MODULES) 159 | BUILD_DIR := $(addprefix $(BUILD_BASE)/,$(MODULES)) 160 | SDK_LIBDIR := $(addprefix $(SDK_BASE)/,$(SDK_LIBDIR)) 161 | SDK_INCDIR := $(addprefix -I$(SDK_BASE)/,$(SDK_INCDIR)) 162 | SRC := $(foreach sdir,$(SRC_DIR),$(wildcard $(sdir)/*.c)) 163 | OBJ := $(patsubst %.c,$(BUILD_BASE)/%.o,$(SRC)) 164 | LIBS := $(addprefix -l,$(LIBS)) 165 | APP_AR := $(addprefix $(BUILD_BASE)/,$(TARGET)_app.a) 166 | TARGET_OUT := $(addprefix $(BUILD_BASE)/,$(TARGET).out) 167 | LD_SCRIPT := $(addprefix -T$(SDK_BASE)/$(SDK_LDDIR)/,$(LD_SCRIPT)) 168 | INCDIR := $(addprefix -I,$(SRC_DIR)) 169 | EXTRA_INCDIR := $(addprefix -I,$(EXTRA_INCDIR)) 170 | MODULE_INCDIR := $(addsuffix /include,$(INCDIR)) 171 | 172 | V ?= $(VERBOSE) 173 | ifeq ("$(V)","1") 174 | Q := 175 | vecho := @true 176 | else 177 | Q := @ 178 | vecho := @echo 179 | endif 180 | 181 | vpath %.c $(SRC_DIR) 182 | 183 | define compile-objects 184 | $1/%.o: %.c 185 | $(vecho) "CC $$<" 186 | $(Q) $(CC) $(INCDIR) $(MODULE_INCDIR) $(EXTRA_INCDIR) $(SDK_INCDIR) $(CFLAGS) -c $$< -o $$@ 187 | endef 188 | 189 | .PHONY: all checkdirs clean flash rebuild 190 | 191 | all: checkdirs $(TARGET_OUT) 192 | 193 | $(TARGET_OUT): $(APP_AR) 194 | $(vecho) "LD $@" 195 | $(Q) $(LD) -L$(SDK_LIBDIR) $(LD_SCRIPT) $(LDFLAGS) -Wl,--start-group $(LIBS) $(APP_AR) -Wl,--end-group -o $@ 196 | $(vecho) "Run objcopy, please wait..." 197 | $(Q) $(OBJCOPY) --only-section .text -O binary $@ eagle.app.v7.text.bin 198 | $(Q) $(OBJCOPY) --only-section .data -O binary $@ eagle.app.v7.data.bin 199 | $(Q) $(OBJCOPY) --only-section .rodata -O binary $@ eagle.app.v7.rodata.bin 200 | $(Q) $(OBJCOPY) --only-section .irom0.text -O binary $@ eagle.app.v7.irom0text.bin 201 | $(Q) $(OBJCOPY) --only-section .irom1.text -O binary $@ eagle.app.v7.irom1text.bin 202 | $(Q) rm -f irom0_flash.bin irom1.bin 203 | $(vecho) "objcopy done" 204 | $(vecho) "Run gen_appbin_esp32.exe" 205 | $(Q) $(SDK_TOOLS)/gen_appbin_esp32.exe $@ $(SDK_BASE)/ld 206 | $(Q) mv eagle.app.flash.bin $(FW_BASE)/$(TARGET).ota 207 | $(Q) mv irom1.bin $(FW_BASE)/irom1.bin &>/dev/null 208 | $(Q) mv irom0_flash.bin $(FW_BASE)/irom0_flash.bin &>/dev/null 209 | $(Q) rm eagle.app.v7.* 210 | $(vecho) "------------------------------------------------------------------------------" 211 | $(vecho) "Generate related files successully in folder $(FW_BASE)" 212 | $(vecho) "boot.bin ------------------>0x00000" 213 | $(vecho) "irom1.bin ----------------->0x04000" 214 | $(vecho) "irom0_flash.bin ----------->0x40000" 215 | $(vecho) "blank.bin ----------------->256K-0xFC000, 1MB-0xFE000, 2MB-0x1FE000" 216 | $(vecho) "user.ota ------------------>(used for OTA)" 217 | $(vecho) "Done" 218 | 219 | $(APP_AR): $(OBJ) 220 | $(vecho) "AR $@" 221 | $(Q) $(AR) cru $@ $^ 222 | 223 | checkdirs: $(BUILD_DIR) $(FW_BASE) 224 | 225 | $(BUILD_DIR): 226 | $(Q) mkdir -p $@ 227 | 228 | $(FW_BASE): 229 | $(Q) mkdir -p $@ 230 | 231 | flash: all 232 | $(ESPTOOL) -p $(ESPPORT) -b $(BAUD) write_flash $(flashimageoptions) 0x00000 $(SDK_BASE)/bin/boot.bin 0x04000 $(FW_BASE)/irom1.bin 0x40000 $(FW_BASE)/irom0_flash.bin 233 | #$(ESPTOOL) -p $(ESPPORT) -b $(BAUD) write_flash $(flashimageoptions) 0x00000 $(SDK_BASE)/bin/boot.bin 0x04000 $(FW_BASE)/irom1.bin 0x40000 $(FW_BASE)/irom0_flash.bin $(blankaddr) $(SDK_BASE)/bin/blank.bin 234 | 235 | rebuild: clean all 236 | 237 | clean: 238 | $(Q) rm -f $(APP_AR) 239 | $(Q) rm -f $(TARGET_OUT) 240 | $(Q) rm -rf $(BUILD_DIR) 241 | $(Q) rm -rf $(BUILD_BASE) 242 | $(Q) rm -rf $(FW_BASE) 243 | 244 | $(foreach bdir,$(BUILD_DIR),$(eval $(call compile-objects,$(bdir)))) 245 | -------------------------------------------------------------------------------- /Firmware/Blink/build/app.out: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sparkfun/ESP32_Miscellany/a854269104a25ddc7c1e1849b14892d56f250e37/Firmware/Blink/build/app.out -------------------------------------------------------------------------------- /Firmware/Blink/build/app_app.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sparkfun/ESP32_Miscellany/a854269104a25ddc7c1e1849b14892d56f250e37/Firmware/Blink/build/app_app.a -------------------------------------------------------------------------------- /Firmware/Blink/build/user/user_main.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sparkfun/ESP32_Miscellany/a854269104a25ddc7c1e1849b14892d56f250e37/Firmware/Blink/build/user/user_main.o -------------------------------------------------------------------------------- /Firmware/Blink/firmware/app.ota: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sparkfun/ESP32_Miscellany/a854269104a25ddc7c1e1849b14892d56f250e37/Firmware/Blink/firmware/app.ota -------------------------------------------------------------------------------- /Firmware/Blink/firmware/irom0_flash.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sparkfun/ESP32_Miscellany/a854269104a25ddc7c1e1849b14892d56f250e37/Firmware/Blink/firmware/irom0_flash.bin -------------------------------------------------------------------------------- /Firmware/Blink/firmware/irom1.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sparkfun/ESP32_Miscellany/a854269104a25ddc7c1e1849b14892d56f250e37/Firmware/Blink/firmware/irom1.bin -------------------------------------------------------------------------------- /Firmware/Blink/include/user_config.h: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | user_config.h 3 | Config file for Blink application 4 | Jim Lindblom @ SparkFun Electronics 5 | January 20, 2016 6 | https://github.com/sparkfun/ESP32_Miscellany 7 | 8 | This file defines the WiFi network and blinking LED pin. 9 | 10 | Resources: 11 | Requires the ESP32 RTOS SDK: https://github.com/espressif/ESP32_RTOS_SDK 12 | 13 | Development environment specifics: 14 | ESP32 RTOS SDK v1.1.0 15 | ESP31B ESP-WROOM-03 Module 16 | ******************************************************************************/ 17 | 18 | #ifndef __USER_CONFIG_H__ 19 | #define __USER_CONFIG_H__ 20 | 21 | ///////////////////////// 22 | // WiFi Network Config // 23 | ///////////////////////// 24 | #define SSID "YOUR_WIFI_SSID" // WiFi Network SSID 25 | #define PASSWORD "YOUR_WIFI_PASSWORD" // WiFi Network password 26 | 27 | //////////////// 28 | // LED Config // 29 | //////////////// 30 | #define LED_PIN 16 31 | #define BLINK_RATE_SCAN 100 32 | #define BLINK_RATE_CONNECT 250 33 | #define BLINK_RATE_GOT_IP 1000 34 | #define BLINK_RATE_DISCONNECT 5000 35 | 36 | #endif 37 | 38 | -------------------------------------------------------------------------------- /Firmware/Blink/user/user_main.c: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | user_main.c 3 | Main source file for Blink application 4 | Jim Lindblom @ SparkFun Electronics 5 | January 20, 2016 6 | https://github.com/sparkfun/ESP32_Miscellany 7 | 8 | This source file includes the user_init() function - entry point for the 9 | application, as well as a helper function to get connnected to a WiFi network. 10 | 11 | The WiFi network definitions are in "include/user_config.h". 12 | 13 | Resources: 14 | Requires the ESP32 RTOS SDK: https://github.com/espressif/ESP32_RTOS_SDK 15 | 16 | Development environment specifics: 17 | ESP32 RTOS SDK v1.1.0 18 | ESP31B ESP-WROOM-03 Module 19 | ******************************************************************************/ 20 | 21 | #include "esp_common.h" 22 | #include "gpio.h" 23 | #include "uart.h" 24 | #include "user_config.h" 25 | 26 | //////////////////////////// 27 | // Blinky LED definitions // 28 | //////////////////////////// 29 | os_timer_t blink_timer; 30 | void blink(void); 31 | void setupBlinkTimer(uint32_t ms); 32 | 33 | ////////////////////////////////// 34 | // WiFi Functions and Constants // 35 | ////////////////////////////////// 36 | void connectWiFi(void); // Utility function to connect to a WiFi network 37 | void wifi_event_handler_cb(System_Event_t *event); // WiFi event callback 38 | 39 | //////////////////////////////////////////// 40 | // user_init - Entry point of application // 41 | //////////////////////////////////////////// 42 | void user_init(void) 43 | { 44 | // Set the LED as an output, turn it on: 45 | GPIO_AS_OUTPUT(LED_PIN); 46 | GPIO_OUTPUT_SET(LED_PIN, 1); 47 | 48 | // Configure the UART, print a message: 49 | UART_SetBaudrate(UART0, BIT_RATE_115200); 50 | printf("SDK version:%s\n", system_get_sdk_version()); 51 | 52 | // Connect to WiFi: 53 | connectWiFi(); 54 | } 55 | 56 | void connectWiFi(void) 57 | { 58 | wifi_set_opmode(STATION_MODE); // Set into station mode 59 | 60 | // Create a station_config struct, and fill it with our SSID and Password 61 | struct station_config config; 62 | bzero(&config, sizeof(struct station_config)); // Zero it out first 63 | sprintf(config.ssid, SSID); // Put the SSID in 64 | sprintf(config.password, PASSWORD); // Put the password in 65 | 66 | // Put our new config struct into the wifi_station_set_config function 67 | wifi_station_set_config(&config); 68 | // Set up a callback function for any WiFi event 69 | wifi_set_event_handler_cb(wifi_event_handler_cb); 70 | } 71 | 72 | void wifi_event_handler_cb(System_Event_t *event) 73 | { 74 | if (event == NULL) 75 | { 76 | return; 77 | } 78 | 79 | switch (event->event_id) // Switch on the event that brought us here 80 | { 81 | case EVENT_STAMODE_SCAN_DONE: // Once the scan is done, blink at 10Hz 82 | setupBlinkTimer(BLINK_RATE_SCAN); 83 | break; 84 | case EVENT_STAMODE_CONNECTED: 85 | setupBlinkTimer(BLINK_RATE_CONNECT); // Once connected to WiFi (no IP yet), blink at 4Hz 86 | break; 87 | case EVENT_STAMODE_GOT_IP: // If we got an IP address, 88 | setupBlinkTimer(BLINK_RATE_GOT_IP); // blink at 1Hz 89 | break; 90 | case EVENT_STAMODE_DISCONNECTED: // If we get disconnected, blink every 5 seconds 91 | setupBlinkTimer(BLINK_RATE_DISCONNECT); 92 | break; 93 | default: 94 | break; 95 | } 96 | } 97 | 98 | void setupBlinkTimer(uint32_t ms) 99 | { 100 | // Disarm the blink_timer timer before (re-)configuring it: 101 | os_timer_disarm(&blink_timer); 102 | // Now set which function blink_timer will call, and define arguments (if any): 103 | os_timer_setfn(&blink_timer, (os_timer_func_t *) blink, (void *) 0); 104 | // Now arm the timer and set the length between calls: 105 | os_timer_arm(&blink_timer, ms/2, 1); 106 | } 107 | 108 | void blink(void) 109 | { 110 | static bool flag = false; 111 | if (flag) 112 | { 113 | GPIO_OUTPUT_SET(LED_PIN, 1); 114 | flag = false; 115 | } 116 | else 117 | { 118 | GPIO_OUTPUT_SET(LED_PIN, 0); 119 | flag = true; 120 | } 121 | } 122 | 123 | -------------------------------------------------------------------------------- /Firmware/Phant/Makefile: -------------------------------------------------------------------------------- 1 | ############################################################# 2 | # 3 | # ESP32 Root Level Makefile 4 | # 5 | # Version 1.0 6 | # 7 | # (c) 2015 by CHERTS 8 | # 9 | ############################################################# 10 | 11 | BUILD_BASE = build 12 | FW_BASE = firmware 13 | 14 | # Base directory for the compiler 15 | XTENSA_TOOLS_ROOT ?= c:/Espressif/xtensa-esp108-elf/bin 16 | 17 | # base directory of the ESP32 SDK package, absolute 18 | SDK_BASE ?= c:/Espressif/ESP32_RTOS_SDK 19 | SDK_TOOLS ?= c:/Espressif/utils/ESP32 20 | 21 | # esptool path and port 22 | ESPTOOL ?= $(SDK_TOOLS)/esptool_esp32.exe 23 | ESPPORT ?= COM2 24 | # Baud rate for programmer 25 | BAUD ?= 256000 26 | 27 | # SPI_SPEED = 40, 26, 20, 80 28 | SPI_SPEED ?= 40 29 | # SPI_MODE: qio, qout, dio, dout 30 | SPI_MODE ?= qio 31 | # SPI_SIZE_MAP 32 | # 0 : 512 KB (256 KB + 256 KB) 33 | # 1 : 256 KB 34 | # 2 : 1024 KB (512 KB + 512 KB) 35 | # 3 : 2048 KB (512 KB + 512 KB) 36 | # 4 : 4096 KB (512 KB + 512 KB) 37 | # 5 : 2048 KB (1024 KB + 1024 KB) 38 | # 6 : 4096 KB (1024 KB + 1024 KB) 39 | SPI_SIZE_MAP ?= 1 40 | 41 | ifeq ($(SPI_SPEED), 26.7) 42 | freqdiv = 1 43 | flashimageoptions = -ff 26m 44 | else 45 | ifeq ($(SPI_SPEED), 20) 46 | freqdiv = 2 47 | flashimageoptions = -ff 20m 48 | else 49 | ifeq ($(SPI_SPEED), 80) 50 | freqdiv = 15 51 | flashimageoptions = -ff 80m 52 | else 53 | freqdiv = 0 54 | flashimageoptions = -ff 40m 55 | endif 56 | endif 57 | endif 58 | 59 | ifeq ($(SPI_MODE), QOUT) 60 | mode = 1 61 | flashimageoptions += -fm qout 62 | else 63 | ifeq ($(SPI_MODE), DIO) 64 | mode = 2 65 | flashimageoptions += -fm dio 66 | else 67 | ifeq ($(SPI_MODE), DOUT) 68 | mode = 3 69 | flashimageoptions += -fm dout 70 | else 71 | mode = 0 72 | flashimageoptions += -fm qio 73 | endif 74 | endif 75 | endif 76 | 77 | ifeq ($(SPI_SIZE_MAP), 1) 78 | size_map = 1 79 | flash = 256 80 | flashimageoptions += -fs 2m 81 | blankaddr = 0xFC000 82 | else 83 | ifeq ($(SPI_SIZE_MAP), 2) 84 | size_map = 2 85 | flash = 1024 86 | flashimageoptions += -fs 8m 87 | blankaddr = 0xFE000 88 | else 89 | ifeq ($(SPI_SIZE_MAP), 3) 90 | size_map = 3 91 | flash = 2048 92 | flashimageoptions += -fs 16m 93 | blankaddr = 0x1FE000 94 | else 95 | ifeq ($(SPI_SIZE_MAP), 4) 96 | size_map = 4 97 | flash = 4096 98 | flashimageoptions += -fs 32m 99 | blankaddr = 0x3FE000 100 | else 101 | ifeq ($(SPI_SIZE_MAP), 5) 102 | size_map = 5 103 | flash = 2048 104 | flashimageoptions += -fs 16m 105 | blankaddr = 0x1FE000 106 | else 107 | ifeq ($(SPI_SIZE_MAP), 6) 108 | size_map = 6 109 | flash = 4096 110 | flashimageoptions += -fs 32m 111 | blankaddr = 0x3FE000 112 | else 113 | size_map = 0 114 | flash = 512 115 | flashimageoptions += -fs 4m 116 | blankaddr = 0x7E000 117 | endif 118 | endif 119 | endif 120 | endif 121 | endif 122 | endif 123 | 124 | # name for the target project 125 | TARGET = app 126 | 127 | # which modules (subdirectories) of the project to include in compiling 128 | MODULES = user phant 129 | EXTRA_INCDIR = include $(SDK_BASE)/extra_include 130 | 131 | # libraries used in this project, mainly provided by the SDK 132 | LIBS = c gcc hal m crypto freertos lwip main net80211 phy pp rtc wpa driver 133 | 134 | # compiler flags using during compilation of source files 135 | CFLAGS = -Os -g -O2 -std=gnu90 -Wpointer-arith -Wundef -Werror -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -mno-serialize-volatile -D__ets__ -DICACHE_FLASH 136 | 137 | # linker flags used to generate the main object file 138 | LDFLAGS = -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static 139 | 140 | # linker script used for the above linkier step 141 | LD_SCRIPT = eagle.pro.v7.ld 142 | 143 | # various paths from the SDK used in this project 144 | SDK_LIBDIR = lib 145 | SDK_LDDIR = ld 146 | SDK_INCDIR = include include/espressif include/lwip include/lwip/ipv4 include/lwip/ipv6 driver_lib/include 147 | 148 | # select which tools to use as compiler, librarian and linker 149 | CC := $(XTENSA_TOOLS_ROOT)/xtensa-esp108-elf-gcc 150 | AR := $(XTENSA_TOOLS_ROOT)/xtensa-esp108-elf-ar 151 | LD := $(XTENSA_TOOLS_ROOT)/xtensa-esp108-elf-gcc 152 | OBJCOPY := $(XTENSA_TOOLS_ROOT)/xtensa-esp108-elf-objcopy 153 | OBJDUMP := $(XTENSA_TOOLS_ROOT)/xtensa-esp108-elf-objdump 154 | 155 | # no user configurable options below here 156 | SRC_DIR := $(MODULES) 157 | BUILD_DIR := $(addprefix $(BUILD_BASE)/,$(MODULES)) 158 | SDK_LIBDIR := $(addprefix $(SDK_BASE)/,$(SDK_LIBDIR)) 159 | SDK_INCDIR := $(addprefix -I$(SDK_BASE)/,$(SDK_INCDIR)) 160 | SRC := $(foreach sdir,$(SRC_DIR),$(wildcard $(sdir)/*.c)) 161 | OBJ := $(patsubst %.c,$(BUILD_BASE)/%.o,$(SRC)) 162 | LIBS := $(addprefix -l,$(LIBS)) 163 | APP_AR := $(addprefix $(BUILD_BASE)/,$(TARGET)_app.a) 164 | TARGET_OUT := $(addprefix $(BUILD_BASE)/,$(TARGET).out) 165 | LD_SCRIPT := $(addprefix -T$(SDK_BASE)/$(SDK_LDDIR)/,$(LD_SCRIPT)) 166 | INCDIR := $(addprefix -I,$(SRC_DIR)) 167 | EXTRA_INCDIR := $(addprefix -I,$(EXTRA_INCDIR)) 168 | MODULE_INCDIR := $(addsuffix /include,$(INCDIR)) 169 | 170 | V ?= $(VERBOSE) 171 | ifeq ("$(V)","1") 172 | Q := 173 | vecho := @true 174 | else 175 | Q := @ 176 | vecho := @echo 177 | endif 178 | 179 | vpath %.c $(SRC_DIR) 180 | 181 | define compile-objects 182 | $1/%.o: %.c 183 | $(vecho) "CC $$<" 184 | $(Q) $(CC) $(INCDIR) $(MODULE_INCDIR) $(EXTRA_INCDIR) $(SDK_INCDIR) $(CFLAGS) -c $$< -o $$@ 185 | endef 186 | 187 | .PHONY: all checkdirs clean flash rebuild 188 | 189 | all: checkdirs $(TARGET_OUT) 190 | 191 | $(TARGET_OUT): $(APP_AR) 192 | $(vecho) "LD $@" 193 | $(Q) $(LD) -L$(SDK_LIBDIR) $(LD_SCRIPT) $(LDFLAGS) -Wl,--start-group $(LIBS) $(APP_AR) -Wl,--end-group -o $@ 194 | $(vecho) "Run objcopy, please wait..." 195 | $(Q) $(OBJCOPY) --only-section .text -O binary $@ eagle.app.v7.text.bin 196 | $(Q) $(OBJCOPY) --only-section .data -O binary $@ eagle.app.v7.data.bin 197 | $(Q) $(OBJCOPY) --only-section .rodata -O binary $@ eagle.app.v7.rodata.bin 198 | $(Q) $(OBJCOPY) --only-section .irom0.text -O binary $@ eagle.app.v7.irom0text.bin 199 | $(Q) $(OBJCOPY) --only-section .irom1.text -O binary $@ eagle.app.v7.irom1text.bin 200 | $(Q) rm -f irom0_flash.bin irom1.bin 201 | $(vecho) "objcopy done" 202 | $(vecho) "Run gen_appbin_esp32.exe" 203 | $(Q) $(SDK_TOOLS)/gen_appbin_esp32.exe $@ $(SDK_BASE)/ld 204 | $(Q) mv eagle.app.flash.bin $(FW_BASE)/$(TARGET).ota 205 | $(Q) mv irom1.bin $(FW_BASE)/irom1.bin &>/dev/null 206 | $(Q) mv irom0_flash.bin $(FW_BASE)/irom0_flash.bin &>/dev/null 207 | $(Q) rm eagle.app.v7.* 208 | $(vecho) "------------------------------------------------------------------------------" 209 | $(vecho) "Generate related files successully in folder $(FW_BASE)" 210 | $(vecho) "boot.bin ------------------>0x00000" 211 | $(vecho) "irom1.bin ----------------->0x04000" 212 | $(vecho) "irom0_flash.bin ----------->0x40000" 213 | $(vecho) "blank.bin ----------------->256K-0xFC000, 1MB-0xFE000, 2MB-0x1FE000" 214 | $(vecho) "user.ota ------------------>(used for OTA)" 215 | $(vecho) "Done" 216 | 217 | $(APP_AR): $(OBJ) 218 | $(vecho) "AR $@" 219 | $(Q) $(AR) cru $@ $^ 220 | 221 | checkdirs: $(BUILD_DIR) $(FW_BASE) 222 | 223 | $(BUILD_DIR): 224 | $(Q) mkdir -p $@ 225 | 226 | $(FW_BASE): 227 | $(Q) mkdir -p $@ 228 | 229 | flash: all 230 | $(ESPTOOL) -p $(ESPPORT) -b $(BAUD) write_flash $(flashimageoptions) 0x00000 $(SDK_BASE)/bin/boot.bin 0x04000 $(FW_BASE)/irom1.bin 0x40000 $(FW_BASE)/irom0_flash.bin 231 | 232 | rebuild: clean all 233 | 234 | clean: 235 | $(Q) rm -f $(APP_AR) 236 | $(Q) rm -f $(TARGET_OUT) 237 | $(Q) rm -rf $(BUILD_DIR) 238 | $(Q) rm -rf $(BUILD_BASE) 239 | $(Q) rm -rf $(FW_BASE) 240 | 241 | $(foreach bdir,$(BUILD_DIR),$(eval $(call compile-objects,$(bdir)))) 242 | -------------------------------------------------------------------------------- /Firmware/Phant/build/app.out: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sparkfun/ESP32_Miscellany/a854269104a25ddc7c1e1849b14892d56f250e37/Firmware/Phant/build/app.out -------------------------------------------------------------------------------- /Firmware/Phant/build/app_app.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sparkfun/ESP32_Miscellany/a854269104a25ddc7c1e1849b14892d56f250e37/Firmware/Phant/build/app_app.a -------------------------------------------------------------------------------- /Firmware/Phant/build/phant/phant.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sparkfun/ESP32_Miscellany/a854269104a25ddc7c1e1849b14892d56f250e37/Firmware/Phant/build/phant/phant.o -------------------------------------------------------------------------------- /Firmware/Phant/build/user/user_main.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sparkfun/ESP32_Miscellany/a854269104a25ddc7c1e1849b14892d56f250e37/Firmware/Phant/build/user/user_main.o -------------------------------------------------------------------------------- /Firmware/Phant/firmware/app.ota: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sparkfun/ESP32_Miscellany/a854269104a25ddc7c1e1849b14892d56f250e37/Firmware/Phant/firmware/app.ota -------------------------------------------------------------------------------- /Firmware/Phant/firmware/irom0_flash.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sparkfun/ESP32_Miscellany/a854269104a25ddc7c1e1849b14892d56f250e37/Firmware/Phant/firmware/irom0_flash.bin -------------------------------------------------------------------------------- /Firmware/Phant/firmware/irom1.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sparkfun/ESP32_Miscellany/a854269104a25ddc7c1e1849b14892d56f250e37/Firmware/Phant/firmware/irom1.bin -------------------------------------------------------------------------------- /Firmware/Phant/include/user_config.h: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | user_config.h 3 | Configuration variables for the Phant example application 4 | Jim Lindblom @ SparkFun Electronics 5 | January 20, 2016 6 | https://github.com/sparkfun/ESP32_Miscellany 7 | 8 | This file defines the desired WiFi network, and determines the Phant stream 9 | fields and values. 10 | 11 | Resources: 12 | Requires the ESP32 RTOS SDK: https://github.com/espressif/ESP32_RTOS_SDK 13 | 14 | Development environment specifics: 15 | ESP32 RTOS SDK v1.1.0 16 | ESP31B ESP-WROOM-03 Module 17 | ******************************************************************************/ 18 | 19 | #ifndef __USER_CONFIG_H__ 20 | #define __USER_CONFIG_H__ 21 | 22 | #define SSID "YOUR_WIFI_SSIDE" // WiFi Network SSID 23 | #define PASSWORD "YOUR_WIFI_PASSWORD" // WiFi Network password 24 | 25 | ////////////////// 26 | // Phant Config // 27 | ////////////////// 28 | #define POST_FREQUENCY 15000 // Post every 15 seconds 29 | const char publicKey[] = "PHANT_PUBLIC_KEY"; 30 | const char privateKey[] = "PHANT_PRIVATE_KEY"; 31 | #define NUM_PHANT_FIELDS 8 // Number of Phant fields 32 | // Names of the Phant fields: 33 | char *fieldOrder[NUM_PHANT_FIELDS] = {"pad32", "pad33", "pad34", "pad35", 34 | "pad36", "pad37", "pad38", "pad39"}; 35 | // ADC pads mapped to Phant fields: 36 | adc1_read_pad padOrder[NUM_PHANT_FIELDS] = {ADC1_PAD_GPIO32, ADC1_PAD_GPIO33, ADC1_PAD_GPIO34, 37 | ADC1_PAD_GPIO35, ADC1_PAD_GPIO36, ADC1_PAD_GPIO37, 38 | ADC1_PAD_GPIO38, ADC1_PAD_GPIO39}; 39 | 40 | /////////////////////// 41 | // Blinky LED Config // 42 | /////////////////////// 43 | #define LED_PIN 16 // LED attached to pin 16 44 | 45 | #endif 46 | 47 | -------------------------------------------------------------------------------- /Firmware/Phant/phant/phant.c: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | phant.c 3 | Phant lwIP library - source 4 | Jim Lindblom @ SparkFun Electronics 5 | January 20, 2016 6 | https://github.com/sparkfun/ESP32_Miscellany 7 | 8 | Assemble a Phant post, and send it using lwIP. 9 | 10 | Resources: 11 | Requires the ESP32 RTOS SDK: https://github.com/espressif/ESP32_RTOS_SDK 12 | 13 | Development environment specifics: 14 | ESP32 RTOS SDK v1.1.0 15 | ESP31B ESP-WROOM-03 Module 16 | 17 | Sources: http://lwip.wikia.com/wiki/Raw/TCP 18 | http://stackoverflow.com/questions/26192758/how-can-i-send-a-simple-http-request-with-a-lwip-stack 19 | ******************************************************************************/ 20 | #include "phant.h" 21 | #include "esp_common.h" 22 | #include "string.h" 23 | 24 | #include "lwip/tcp.h" 25 | #include "lwip/ip4.h" 26 | 27 | uint8_t dest_ip[4] = {54, 86, 132, 254}; 28 | const char phantServer[] = "data.sparkfun.com"; 29 | 30 | int connect(void); 31 | void sendData(void); 32 | struct tcp_pcb * pcb; 33 | void tcpErrorHandler(void *arg, err_t err); 34 | err_t tcpRecvCallback(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err); 35 | err_t tcpSendCallback(void *arg, struct tcp_pcb *tpcb, u16_t len); 36 | err_t connectCallback(void *arg, struct tcp_pcb *tpcb, err_t err); 37 | 38 | char postContent[512]; 39 | 40 | void initPhant(const char * pub, const char * prv) 41 | { 42 | memset(postContent, 0, 512); 43 | sprintf(postContent, "GET /input/%s?private_key=%s", pub, prv); 44 | } 45 | 46 | void phantSend(void) 47 | { 48 | connect(); 49 | // connect() will connect to the server, the rest of our posting 50 | // is taken care of through callbacks 51 | } 52 | 53 | void phantAdd(char * field, int data) 54 | { 55 | // Add the field/data value to our postContent string: 56 | char temp[32]; 57 | memset(temp, 0, 32); 58 | sprintf(temp, "&%s=%d", field, data); 59 | strcat(postContent, temp); 60 | } 61 | 62 | void sendData(void) 63 | { 64 | // Create the end of the post 65 | strcat(postContent, " HTTP/1.0\r\nHost: "); 66 | strcat(postContent, phantServer); 67 | strcat(postContent, "\r\n\r\n "); 68 | 69 | uint32_t len = strlen(postContent); 70 | 71 | // Queue data up. Set API flag to allocate new memory and copy data into it. 72 | //err_t errRet = tcp_write(pcb, string, len, TCP_WRITE_FLAG_COPY); 73 | err_t errRet = tcp_write(pcb, postContent, len, TCP_WRITE_FLAG_COPY); 74 | 75 | if (errRet != ERR_OK) 76 | { 77 | printf("Error queueing data: %d\r\n", errRet); 78 | return; 79 | } 80 | 81 | // Send data: 82 | errRet = tcp_output(pcb); 83 | 84 | if (errRet != ERR_OK) 85 | { 86 | printf("Error sending data: %d\r\n", errRet); 87 | return; 88 | } 89 | return; 90 | } 91 | 92 | int connect(void) 93 | { 94 | uint32_t data = 0x55555555; // Data to identify connection 95 | err_t errRet; 96 | 97 | struct ip_addr dest; 98 | // Create an ip_addr variable, based on the dest_ip global: 99 | IP4_ADDR(&dest, dest_ip[0], dest_ip[1], dest_ip[2], dest_ip[3]); 100 | 101 | pcb = tcp_new(); // Create a new tcp connection 102 | if (pcb == NULL) // tcp_new returns NULL if it failed 103 | { 104 | printf("Failed to create connection\r\n"); 105 | return -1; 106 | } 107 | // Otherwise tcp_new will return a tcp_pcb "protocol control block" pointer 108 | tcp_arg(pcb, &data); // Assign our data to the pcb 109 | 110 | // Assign error, receive and sent callback functions to the pcb 111 | tcp_err(pcb, tcpErrorHandler); 112 | tcp_recv(pcb, tcpRecvCallback); 113 | tcp_sent(pcb, tcpSendCallback); 114 | 115 | // Call tcp_connect to assign our pcb to a connection. 116 | // dest is the IP address generated from the dest_ip global 117 | // 80 is the port 118 | // connectCallback is the callback function to be called when the pcb connects 119 | errRet = tcp_connect(pcb, &dest, 80, connectCallback); 120 | if (errRet == ERR_OK) 121 | { 122 | printf("Setting up the connection\r\n"); 123 | return 1; 124 | } 125 | else 126 | { 127 | printf("Error setting up connection\r\n"); 128 | return -1; 129 | } 130 | } 131 | 132 | void tcpErrorHandler(void *arg, err_t err) 133 | { 134 | printf("TCP Error: %d\r\n", err); 135 | } 136 | 137 | err_t tcpRecvCallback(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err) 138 | { 139 | printf("Data received.\r\n====================\r\n\r\n"); 140 | if (p == NULL) 141 | { 142 | printf("Closing connection"); 143 | //tcp_close(pcb); // Hmm, this causes the ESP32 to reset, doing something bad to memory somewhere 144 | return ERR_ABRT; 145 | } 146 | else 147 | { 148 | printf("Return data size: %d\r\n", p->len); 149 | printf("Contents: %s\r\n", (char *)p->payload); 150 | printf("\r\n====================\r\n"); 151 | } 152 | return ERR_OK; 153 | } 154 | 155 | err_t tcpSendCallback(void *arg, struct tcp_pcb *tpcb, u16_t len) 156 | { 157 | printf("TCP Data sent\r\n"); 158 | return ERR_OK; 159 | } 160 | 161 | err_t connectCallback(void *arg, struct tcp_pcb *tpcb, err_t err) 162 | { 163 | printf("TCP Connection established\r\n"); 164 | sendData(); // Call the sendData() function to send our Phant data. 165 | return ERR_OK; 166 | } 167 | -------------------------------------------------------------------------------- /Firmware/Phant/phant/phant.h: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | phant.h 3 | Phant lwIP library - header 4 | Jim Lindblom @ SparkFun Electronics 5 | January 20, 2016 6 | https://github.com/sparkfun/ESP32_Miscellany 7 | 8 | Assemble a Phant post, and send it using lwIP. 9 | 10 | Resources: 11 | Requires the ESP32 RTOS SDK: https://github.com/espressif/ESP32_RTOS_SDK 12 | 13 | Development environment specifics: 14 | ESP32 RTOS SDK v1.1.0 15 | ESP31B ESP-WROOM-03 Module 16 | ******************************************************************************/ 17 | 18 | #ifndef PHANT_H 19 | #define PHANT_H 20 | 21 | //void initPhant(void); // Initialze a new Phant post 22 | void initPhant(const char * pub, const char * prv); 23 | void phantAdd(char * field, int data); // Add a field/value combo to the post 24 | void phantSend(void); // Send the assembled post to the Phant server 25 | 26 | #endif -------------------------------------------------------------------------------- /Firmware/Phant/user/user_main.c: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | user_main.c 3 | Main source file for Phant application 4 | Jim Lindblom @ SparkFun Electronics 5 | January 20, 2016 6 | https://github.com/sparkfun/ESP32_Miscellany 7 | 8 | This source file includes the user_init() function - entry point for the 9 | application, as well as a helper function to get connnected to a WiFi network. 10 | 11 | The WiFi network definitions are in "include/user_config.h". 12 | 13 | Resources: 14 | Requires the ESP32 RTOS SDK: https://github.com/espressif/ESP32_RTOS_SDK 15 | 16 | Development environment specifics: 17 | ESP32 RTOS SDK v1.1.0 18 | ESP31B ESP-WROOM-03 Module 19 | ******************************************************************************/ 20 | 21 | #include "esp_common.h" 22 | #include "gpio.h" 23 | #include "uart.h" 24 | #include "phant.h" 25 | #include "user_config.h" 26 | 27 | //////////////////// 28 | // WiFi Functions // 29 | //////////////////// 30 | void connectWiFi(void); // Utility function to connect to a WiFi network 31 | void wifi_event_handler_cb(System_Event_t *event); // WiFi event callback 32 | 33 | ///////////////////////////////////// 34 | // Timer Functions and Definitions // 35 | ///////////////////////////////////// 36 | // setupTimer is a generic timer-setting function. Give it a os_timer_t pointer, 37 | // milliseconds between call, and a function to be called 38 | void setupTimer(os_timer_t * timer, uint32_t ms, void * func); 39 | os_timer_t blink_timer; // Blink timer 40 | void blink(void); // Blink function 41 | os_timer_t post_timer; // Post timer 42 | void post(void); // Post function 43 | 44 | //////////////////////////////////////////// 45 | // user_init - Entry point of application // 46 | //////////////////////////////////////////// 47 | void user_init(void) 48 | { 49 | // Set the LED as an output, turn it off: 50 | GPIO_AS_OUTPUT(LED_PIN); 51 | GPIO_OUTPUT_SET(LED_PIN, 0); 52 | 53 | // Configure the UART, print a message: 54 | UART_SetBaudrate(UART0, BIT_RATE_115200); 55 | printf("SDK version:%s\n", system_get_sdk_version()); 56 | 57 | // Connect to WiFi: 58 | connectWiFi(); 59 | } 60 | 61 | //////////////////////////////////////////////////////////////////// 62 | // connectWiFi() - Connects to SSID and PASSWORD in user_config.h // 63 | //////////////////////////////////////////////////////////////////// 64 | void connectWiFi(void) 65 | { 66 | wifi_set_opmode(STATION_MODE); // Set into station mode 67 | 68 | // Create a station_config struct, and fill it with our SSID and Password 69 | struct station_config config; 70 | bzero(&config, sizeof(struct station_config)); // Zero it out first 71 | sprintf(config.ssid, SSID); // Put the SSID in 72 | sprintf(config.password, PASSWORD); // Put the password in 73 | 74 | // Put our new config struct into the wifi_station_set_config function 75 | wifi_station_set_config(&config); 76 | // Set up a callback function for any WiFi event 77 | wifi_set_event_handler_cb(wifi_event_handler_cb); 78 | } 79 | 80 | ///////////////////////////////////////////////////////////////// 81 | // wifi_event_handler_cb() - Callback function for WiFi events // 82 | ///////////////////////////////////////////////////////////////// 83 | void wifi_event_handler_cb(System_Event_t *event) 84 | { 85 | if (event == NULL) 86 | { 87 | return; 88 | } 89 | 90 | switch (event->event_id) // Switch on the event that brought us here 91 | { 92 | case EVENT_STAMODE_SCAN_DONE: // Once the scan is done, 93 | setupTimer(&blink_timer, 100/2, blink); // Blink at 10Hz 94 | break; 95 | case EVENT_STAMODE_CONNECTED: // Once we've connected (no IP yet), 96 | setupTimer(&blink_timer, 250/2, blink); // Blink at 4Hz 97 | break; 98 | case EVENT_STAMODE_GOT_IP: // If we're connected and received an IP, 99 | // Start the Phant post timer: 100 | setupTimer(&post_timer, POST_FREQUENCY, post); 101 | setupTimer(&blink_timer, 0, blink); // Turn blink off 102 | GPIO_OUTPUT_SET(LED_PIN, 1); // Turn LED on 103 | break; 104 | case EVENT_STAMODE_DISCONNECTED: // If disconnected, 105 | setupTimer(&blink_timer, 5000/2, blink); // blink every 5s 106 | break; 107 | default: 108 | break; 109 | } 110 | } 111 | 112 | /////////////////////////////////////////////////////////////////////// 113 | // setupTimer() - Starts a timer to be called every ms milliseconds, // 114 | // and calls the func function // 115 | /////////////////////////////////////////////////////////////////////// 116 | void setupTimer(os_timer_t * timer, uint32_t ms, void * func) 117 | { 118 | // Disarm the blink_timer timer before (re-)configuring it: 119 | os_timer_disarm(timer); 120 | 121 | if (ms > 0) 122 | { 123 | // Now set which function blink_timer will call, and define arguments: 124 | os_timer_setfn(timer, (os_timer_func_t *)func, (void *) 0); 125 | // Now arm the timer and set the length between calls: 126 | os_timer_arm(timer, ms, 1); 127 | } 128 | } 129 | 130 | ///////////////////////////////////////////////////////////////////// 131 | // post() - Creates a Phant post, and sends it to the Phant server // 132 | ///////////////////////////////////////////////////////////////////// 133 | void post(void) 134 | { 135 | //initPhant(); // Initialize a new Phant post 136 | //initPhant("jqLLvVZo5zS2o8mx7a2z", "zz554jvKx0C8ADVn1E8J"); 137 | initPhant(publicKey, privateKey); 138 | int i=0; 139 | for (; i 2 | 16 | 18 | 19 | 21 | image/svg+xml 22 | 24 | 25 | 26 | 27 | 47 | 49 | 60 | Name 67 | 78 | Power 85 | 96 | GND 103 | 114 | GPIO 121 | 132 | ADC 139 | 150 | Serial 157 | 168 | Touch 175 | 186 | SDIO 193 | 204 | JTAG 211 | 222 | Misc 229 | 230 | 241 | 248 | 259 | GND 266 | 277 | GND 284 | 295 | 302 | 313 | 3V3 320 | 331 | 3.3V 338 | 349 | 356 | 367 | EN 374 | 385 | Enable 392 | 393 | 404 | SENSOR-VP 411 | 422 | 36 429 | 440 | 1:0 447 | 458 | ADC-H 465 | 466 | 477 | SENSOR-VN 484 | 495 | 39 502 | 513 | 1:3 520 | 531 | ADC-H 538 | 539 | 550 | IO34 557 | 568 | 34 575 | 586 | 1:6 593 | 604 | 611 | 622 | IO35 629 | 640 | 35 647 | 658 | 1:7 665 | 676 | 683 | 694 | IO32 701 | 712 | 32 719 | 730 | 1:4 737 | 748 | 9 755 | 766 | XTAL-32K-P 773 | 774 | 785 | IO33 792 | 803 | 33 810 | 821 | 1:5 828 | 839 | 8 846 | 857 | XTAL-32K-N 864 | 865 | 876 | IO25 883 | 894 | 25 901 | 912 | 2:8 919 | 930 | DAC1 937 | 938 | 949 | IO26 956 | 967 | 26 974 | 985 | 2:9 992 | 1003 | DAC2 1010 | 1011 | 1022 | IO27 1029 | 1040 | 27 1047 | 1058 | 2:7 1065 | 1076 | 7 1083 | 1094 | 1101 | 1112 | IO14 1119 | 1130 | 14 1137 | 1148 | 2:6 1155 | 1166 | 6 1173 | 1184 | MTMS 1191 | 1202 | HSPICLK 1209 | 1210 | 1221 | IO12 1228 | 1239 | 12 1246 | 1257 | 2:5 1264 | 1275 | 5 1282 | 1293 | MTDI 1300 | 1311 | HSPIQ 1318 | 1319 | 1330 | GND 1337 | 1348 | GND 1355 | 1366 | 1373 | 1384 | IO13 1391 | 1402 | 13 1409 | 1420 | 2:4 1427 | 1438 | U0CTS 1445 | 1456 | 4 1463 | 1474 | MTCK 1481 | 1492 | HSPID 1499 | 1500 | 1511 | SHD 1518 | 1529 | 9 1536 | 1547 | U1RXD 1554 | 1565 | DATA2 1572 | 1583 | SPIHD 1590 | 1591 | 1602 | SWP 1609 | 1620 | 10 1627 | 1638 | U1TXD 1645 | 1656 | DATA3 1663 | 1674 | SPIWP 1681 | 1682 | 1693 | SCS 1700 | 1711 | 11 1718 | 1729 | U1RTS 1736 | 1747 | CMD 1754 | 1765 | SPICS0 1772 | 1773 | 1784 | SCK 1791 | 1802 | 6 1809 | 1820 | U1CTS 1827 | 1838 | CLK 1845 | 1856 | SPICLK 1863 | 1864 | 1875 | SDO 1882 | 1893 | 7 1900 | 1911 | DATA0 1918 | 1929 | SPIQ 1936 | 1937 | 1948 | SDI 1955 | 1966 | 8 1973 | 1984 | DATA1 1991 | 2002 | SPID 2009 | 2010 | 2021 | IO15 2028 | 2039 | 15 2046 | 2057 | 2:3 2064 | 2075 | U0RTS 2082 | 2093 | 3 2100 | 2111 | MTDO 2118 | 2129 | HSPICS0 2136 | 2137 | 2148 | IO2 2155 | 2166 | 2 2173 | 2184 | 2:2 2190 | 2201 | 2 2208 | 2219 | HSPIWP 2226 | 2227 | 2238 | 2245 | 2256 | IO0 2263 | 2274 | 0 2281 | 2292 | 2:1 2299 | 2310 | 1 2317 | 2328 | CLK-OUT1 2335 | 2336 | 2347 | IO4 2354 | 2365 | 4 2372 | 2383 | 2:0 2390 | 2401 | 0 2408 | 2419 | HSPIHD 2426 | 2427 | 2438 | IO16 2445 | 2456 | 16 2463 | 2474 | HS1-DATA4 2481 | 2482 | 2493 | IO17 2500 | 2511 | 17 2518 | 2529 | HS1-DATA5 2536 | 2537 | 2548 | IO5 2555 | 2566 | 5 2573 | 2584 | VSPICS0 2591 | 2602 | HS1-DATA6 2609 | 2610 | 2621 | IO18 2628 | 2639 | 18 2646 | 2657 | VSPICLK 2664 | 2675 | HS1-DATA7 2682 | 2683 | 2694 | IO19 2701 | 2712 | 19 2719 | 2730 | VSPIQ 2737 | 2748 | HS2-DATA2 2755 | 2766 | 2773 | 2784 | IO20 2791 | 2802 | 20 2809 | 2820 | VSPID 2827 | 2838 | HS2-DATA3 2845 | 2856 | 2863 | 2874 | IO21 2881 | 2892 | 21 2899 | 2910 | VSPIHD 2917 | 2928 | HS2-CMD 2935 | 2946 | 2953 | 2964 | RXD 2971 | 2982 | 3 2989 | 3000 | U0RXD 3007 | 3018 | HS2-DATA0 3025 | 3036 | CLK-OUT2 3043 | 3044 | 3055 | TXD 3062 | 3073 | 1 3080 | 3091 | U0TXD 3098 | 3109 | HS2-DATA1 3116 | 3127 | CLK-OUT3 3134 | 3135 | 3146 | IO22 3153 | 3164 | 22 3171 | 3182 | VSPIWP 3189 | 3200 | HS2-CLK 3207 | 3218 | 3225 | 3236 | IO23 3243 | 3254 | 23 3261 | 3272 | 3279 | 3290 | GND 3297 | 3308 | GND 3315 | 3326 | 3333 | 3340 | Motor PWM: Any GPIO - Four channels of 16-bit timers to generate PWM waveforms. 3347 | 3354 | LED PWM: Any GPIO - 8 independent channels running at 80MHz clock 3361 | 3368 | 3369 | -------------------------------------------------------------------------------- /Graphical Datasheet/tagscript.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | #http://www.astro.ufl.edu/~warner/prog/python.html - Python Basics if you want to learn some Pythong 3 | #https://pypi.python.org/pypi/svgwrite/ - Library this script uses 4 | #install Python27, download svgwrite, from svgwrite folder run "C:\Python27\python setup.py install" 5 | 6 | # This script starts by asking for a file, this name is saved as 'myfile' 7 | # Input file is a 'myfile'.csv and is referred to as file 8 | # Be careful what characters you use. This is a comma deliminated file, so using a comma in your text will cause problems. 9 | # Also, some applications will change characters to non-standard characters you will get an error (" - " is often to a larger dash that is non standard) 10 | # Output file is a 'myfile'.svg and is defined before the while loop 11 | # The script is setup for 13 fields, to add more change the global fields variable and add another section to the writeField function with the colors you want. 12 | # If the following words are in field 1 of a line it will change the structure of the output blocks to fit that heading "Left, Right, Top, Text, Extras" 13 | # Text will not make a box, but make a new row of text for each field, each line will be a different section of text, this section must be after blocks 14 | # Extras will look for a file in the folder /Images called value.png and add it to the svg, useful for things like ISP headers graphic, etc. (I'm not actually using this) 15 | # File is read until field 1 is "EOF" 16 | 17 | import os 18 | import svgwrite 19 | import time 20 | 21 | ################################################## GLOBAL VARIABLES ######################################## 22 | 23 | row=0 #row starts at the top 24 | height=12 #height of a box 25 | width=45 #width of a box 26 | rowheight=15 #height of a row (leaving enough space between rows to move) 27 | rowwidth=48 #width of a 'spot', basically width plus a few 28 | fields=10 # number of fields 29 | documentWidth = rowwidth*fields +50 #maximum width the document should be 30 | documentHeight = 2250 #this is guess since we need to make the document before we know the file size, doesn't really matter anyway 31 | direction = 'r' #which direction the tag is facing, staring out with labels on the right 32 | offset=0 #this is where we start, for the left we will start on the right side of the page 33 | previoustext = 0 #for text function, defines how much text we have already written so we know where to start 34 | textheight=17 #how much we add each time we add a line of text 35 | textstart=100 #where a block of text will start (y axis), this will be set in the code 36 | myfile="esp32-wroom-03" #file read in to be parsed 37 | fontsize=12 38 | imagewidth=250 39 | imageheight=250 40 | indent = 1 41 | 42 | ################################################# FUNCTIONS ################################################### 43 | 44 | #Writes plain text from the text section 45 | def writeText(i,value,row): 46 | 47 | text = dwg.add(dwg.text(str(value), insert=(0,textstart),font_size=12, font_family='Montserrat', fill='black')) 48 | #print ("Printing " + str(value) + " at " + str(textstart)) 49 | global previoustext 50 | previoustext = previoustext + textheight 51 | #end writeText 52 | 53 | #Creates colored blocks and text for fields 54 | def writeField(type,value,row,spot): 55 | #print("Type: " + str(type) + " Value: " + value) 56 | if (type==0): #Pin name on board 57 | box0 = dwg.add(dwg.rect((rowwidth*spot+offset,row*rowheight), (width,height), 1, 1, stroke='black', opacity=0.3, fill='white')) 58 | text0 = dwg.add(dwg.text(str(value), insert=(spot*rowwidth+offset+indent,row*rowheight+height),font_size=fontsize, font_family='Montserrat', fill='black')) 59 | #print("Box0, in white with " + value + " written in black") 60 | 61 | elif(type==1): #Power 62 | box1 = dwg.add(dwg.rect((rowwidth*spot+offset,row*rowheight), (width,height), 1, 1, stroke='red', opacity=0.8, fill='red')) 63 | text1 = dwg.add(dwg.text(str(value), insert=(spot*rowwidth+offset+indent,row*rowheight+height),font_size=fontsize, font_family='Montserrat', fill='black')) 64 | #print("Box1, in red with " + value + " written in black") 65 | 66 | elif(type==2): #GND 67 | box2 = dwg.add(dwg.rect((rowwidth*spot+offset,row*rowheight), (width,height), 1, 1, stroke='black', opacity=0.9, fill='black')) 68 | text2 = dwg.add(dwg.text(str(value), insert=(spot*rowwidth+offset+indent,row*rowheight+height),font_size=fontsize, font_family='Montserrat', fill='white')) 69 | #print("Box2, in black with " + value + " written in white") 70 | 71 | elif(type==3):#Control 72 | box3 = dwg.add(dwg.rect((rowwidth*spot+offset,row*rowheight), (width,height), 1, 1, stroke='yellow', opacity=0.7, fill='yellow')) 73 | text3 = dwg.add(dwg.text(str(value), insert=(spot*rowwidth+offset+indent,row*rowheight+height),font_size=fontsize, font_family='Montserrat', fill='black')) 74 | #print("Box3 in red with " + value + " written in black") 75 | 76 | elif(type==4):#Arduino Pin number 77 | box4 = dwg.add(dwg.rect((rowwidth*spot+offset,row*rowheight), (width,height), 1, 1, stroke='green', opacity=0.3, fill='green')) 78 | text4 = dwg.add(dwg.text(str(value), insert=(spot*rowwidth+offset+indent,row*rowheight+height),font_size=fontsize, font_family='Montserrat', fill='black')) 79 | #print("Box4 in green with " + value + " written in black") 80 | 81 | elif(type==5):#Port 82 | box5 = dwg.add(dwg.rect((rowwidth*spot+offset,row*rowheight), (width,height), 1, 1, stroke='blue', opacity=0.4, fill='blue')) 83 | text5 = dwg.add(dwg.text(str(value), insert=(spot*rowwidth+offset+indent,row*rowheight+height),font_size=fontsize, font_family='Montserrat', fill='black')) 84 | #print("Box5 in blue with " + value + " written in black") 85 | 86 | elif(type==6):#Analog Pin 87 | box6 = dwg.add(dwg.rect((rowwidth*spot+offset,row*rowheight), (width,height), 1, 1, stroke='purple', opacity=0.4, fill='purple')) 88 | text6 = dwg.add(dwg.text(str(value), insert=(spot*rowwidth+offset+indent,row*rowheight+height),font_size=fontsize, font_family='Montserrat', fill='black')) 89 | #print("Box6 in purple with " + value + " written in black") 90 | 91 | elif(type==7):#PWM 92 | box7 = dwg.add(dwg.rect((rowwidth*spot+offset,row*rowheight), (width,height), 1, 1, stroke='yellow', opacity=0.3, fill='yellow')) 93 | text7 = dwg.add(dwg.text(str(value), insert=(spot*rowwidth+offset+indent,row*rowheight+height),font_size=fontsize, font_family='Montserrat', fill='black')) 94 | #print("Box7 in yellow with " + value + " written in black") 95 | 96 | elif(type==8):#Serial 97 | box8 = dwg.add(dwg.rect((rowwidth*spot+offset,row*rowheight), (width,height), 1, 1, stroke='grey', opacity=0.3, fill='grey')) 98 | text8 = dwg.add(dwg.text(str(value), insert=(spot*rowwidth+offset+indent,row*rowheight+height),font_size=fontsize, font_family='Montserrat', fill='black')) 99 | #print("Box8 in grey with " + value + " written in black") 100 | 101 | elif(type==9):#External Interupt 102 | box9 = dwg.add(dwg.rect((rowwidth*spot+offset,row*rowheight), (width,height), 1, 1, stroke='purple', opacity=0.2, fill='purple')) 103 | text9 = dwg.add(dwg.text(str(value), insert=(spot*rowwidth+offset+indent,row*rowheight+height),font_size=fontsize, font_family='Montserrat', fill='black')) 104 | #print("Box9 in purple with " + value + " written in black") 105 | 106 | elif(type==10):#Pin Chg Int 107 | box10 = dwg.add(dwg.rect((rowwidth*spot+offset,row*rowheight), (width,height), 1, 1, stroke='orange', opacity=0.5, fill='orange')) 108 | text10 = dwg.add(dwg.text(str(value), insert=(spot*rowwidth+offset+indent,row*rowheight+height),font_size=fontsize-3, font_family='Montserrat', fill='black')) 109 | #print("Box10 in orange with " + value + " written in black") 110 | 111 | elif(type==11):#Misc 112 | box11 = dwg.add(dwg.rect((rowwidth*spot+offset,row*rowheight), (width,height), 1, 1, stroke='blue', opacity=0.1, fill='blue')) 113 | text11 = dwg.add(dwg.text(str(value), insert=(spot*rowwidth+offset+indent,row*rowheight+height),font_size=fontsize, font_family='Montserrat', fill='black')) 114 | #print("Box11 in blue with " + value + " written in black") 115 | 116 | elif(type==12):#Misc2 117 | box12 = dwg.add(dwg.rect((rowwidth*spot+offset,row*rowheight), (width,height), 1, 1, stroke='blue', opacity=0.1, fill='blue')) 118 | text12 = dwg.add(dwg.text(str(value), insert=(spot*rowwidth+offset+indent,row*rowheight+height),font_size=fontsize, font_family='Montserrat', fill='black')) 119 | #print("Box12 in blue with " + value + " written in black") 120 | #to add more, change elif statement, stroke color, fill color, text color, variable names (box and text) and print statement, also change 'fields' global variable 121 | #end writeField 122 | 123 | 124 | #adds images to end of document, currently not used as pngs don't work as well as I'd like and it is easier to just drag and drop the files I want into the final file. 125 | def writeImages(i,value,row): 126 | global previoustext 127 | currentimage = "Images/" + value + ".png" 128 | if os.access(currentimage, os.R_OK): 129 | print "Adding " + currentimage 130 | image = dwg.add(dwg.image(href=("../" + currentimage), insert=(i*imagewidth,textstart))) 131 | else: 132 | print "Could not find " + currentimage 133 | #end writeImages 134 | 135 | 136 | 137 | 138 | #open file with read access 139 | myfile = raw_input("Enter file name minus .csv extension ()ex. ESP8266/Thing): ") 140 | if os.access(myfile +".csv", os.R_OK): 141 | file = open(myfile +".csv","r") 142 | print "File opened" 143 | else: 144 | print "File not found, please try again, there should be a comma deliminated csv file with the data in it. See script for more details" 145 | time.sleep(10) 146 | os._exit(0) 147 | 148 | #read in each line parse, and send each field to writeField 149 | rawline="not empty" 150 | dwg = svgwrite.Drawing(filename=str(myfile+".svg"), profile='tiny', size=(documentWidth,documentHeight)) 151 | while (rawline!=""): 152 | rawline = file.readline() 153 | line = rawline.split(",") #Split into fields separated by "," 154 | row=row+1 155 | spot=0 156 | if (line[0] == "Left"): 157 | direction = "l" 158 | offset = documentWidth - rowwidth 159 | line[0] = "" 160 | if (line[0] == "Right"): 161 | direction = "r" 162 | offset = 0 163 | line[0] = "" 164 | if (line[0] == "Top"): 165 | direction = "r" 166 | offset = 0 167 | line[0] = "" 168 | if (line[0] == "Text"): 169 | offset = 0 170 | line[0] = "" 171 | direction = "text" 172 | if(line[0] == "Extras"): 173 | offset=0 174 | line[0]="" 175 | direction = "extras" 176 | if (line[0] == "EOF"): #if we are done 177 | dwg.save() 178 | break 179 | for i in range(0,fields): #go through total number of fields 180 | if(line[i]!="" and direction=='r'): 181 | writeField(i,line[i],row, spot)#call function to add that field to the svg file 182 | spot=spot+1 #move 'cursor' one spot to the right 183 | 184 | if(line[i]!="" and direction=='l'): 185 | writeField(i,line[i],row, spot)#call function to add that field to the svg file 186 | spot=spot-1 #move 'cursor' one spot to the left 187 | 188 | if (line[i]!="" and direction == "text"): 189 | textstart = row*rowheight+previoustext 190 | writeText(i,line[i],row) 191 | 192 | if (line[i]!="" and direction == "extras"): 193 | writeImages(i,line[i],row) 194 | #end of while 195 | 196 | 197 | print ("End of File, the output is located at " + myfile + ".svg") 198 | file.close() -------------------------------------------------------------------------------- /Hardware/esp32.lbr: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | Keepout Zone 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | 561 | 562 | 563 | 564 | 565 | 566 | 567 | 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575 | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | 599 | 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | 614 | 615 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 680 | 681 | 682 | 683 | 684 | 685 | 686 | 687 | 688 | 689 | 690 | 691 | 692 | 693 | 694 | 695 | 696 | 697 | 698 | 699 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 725 | 726 | 727 | 728 | 729 | 730 | 731 | 732 | 733 | 734 | 735 | 736 | 737 | 738 | 739 | 740 | 741 | 742 | 743 | 744 | 745 | 746 | 747 | 748 | 749 | 750 | 751 | 752 | 753 | 754 | 755 | 756 | 757 | 758 | 759 | 760 | 761 | 762 | 763 | 764 | 765 | 766 | 767 | 768 | 769 | 770 | 771 | 772 | 773 | 774 | 775 | 776 | 777 | 778 | 779 | 780 | 781 | 782 | 783 | 784 | 785 | 786 | 787 | 788 | 789 | 790 | 791 | 792 | 793 | 794 | 795 | 796 | 797 | 798 | 799 | 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | 810 | 811 | 812 | 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 824 | 825 | 826 | 827 | 828 | 829 | 830 | 831 | 832 | 833 | 834 | 835 | 836 | 837 | 838 | 839 | 840 | 841 | 842 | 843 | 844 | 845 | 846 | 847 | 848 | 849 | 850 | 851 | 852 | 853 | 854 | 855 | 856 | 857 | 858 | 859 | 860 | 861 | 862 | 863 | 864 | 865 | 866 | 867 | >Name 868 | >Value 869 | 870 | 871 | 872 | 873 | 874 | 875 | 876 | 877 | 878 | 879 | 880 | 881 | 882 | 883 | 884 | 885 | 886 | 887 | 888 | 889 | 890 | 891 | 892 | 893 | 894 | 895 | 896 | 897 | 898 | 899 | 900 | 901 | 902 | 903 | 904 | 905 | 906 | 907 | 908 | 909 | 910 | 911 | 912 | 913 | 914 | 915 | 916 | 917 | 918 | 919 | 920 | 921 | 922 | 923 | 924 | 925 | 926 | 927 | 928 | 929 | 930 | 931 | 932 | 933 | 934 | 935 | 936 | 937 | 938 | 939 | 940 | 941 | 942 | 943 | 944 | 945 | 946 | 947 | 948 | 949 | 950 | 951 | 952 | 953 | 954 | 955 | 956 | 957 | 958 | 959 | 960 | 961 | 962 | 963 | 964 | 965 | 966 | 967 | 968 | 969 | 970 | 971 | 972 | >Name 973 | >Value 974 | 975 | 976 | 977 | 978 | 979 | 980 | 981 | 982 | 983 | 984 | 985 | 986 | 987 | 988 | 989 | 990 | 991 | 992 | 993 | 994 | 995 | 996 | 997 | 998 | 999 | 1000 | 1001 | 1002 | 1003 | 1004 | 1005 | 1006 | 1007 | 1008 | 1009 | 1010 | 1011 | 1012 | 1013 | 1014 | 1015 | 1016 | 1017 | 1018 | 1019 | 1020 | 1021 | 1022 | 1023 | 1024 | 1025 | 1026 | 1027 | 1028 | 1029 | 1030 | 1031 | 1032 | 1033 | 1034 | 1035 | 1036 | 1037 | 1038 | 1039 | 1040 | 1041 | 1042 | 1043 | 1044 | 1045 | 1046 | 1047 | 1048 | 1049 | 1050 | 1051 | 1052 | 1053 | 1054 | 1055 | 1056 | 1057 | 1058 | 1059 | 1060 | 1061 | 1062 | 1063 | 1064 | 1065 | 1066 | 1067 | 1068 | 1069 | 1070 | 1071 | 1072 | 1073 | 1074 | 1075 | 1076 | 1077 | 1078 | 1079 | 1080 | 1081 | 1082 | 1083 | 1084 | 1085 | 1086 | 1087 | 1088 | 1089 | 1090 | 1091 | 1092 | 1093 | 1094 | 1095 | -------------------------------------------------------------------------------- /Images/esp-wroom-03-development-board.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sparkfun/ESP32_Miscellany/a854269104a25ddc7c1e1849b14892d56f250e37/Images/esp-wroom-03-development-board.jpg -------------------------------------------------------------------------------- /Images/esp-wroom-03_bottom.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sparkfun/ESP32_Miscellany/a854269104a25ddc7c1e1849b14892d56f250e37/Images/esp-wroom-03_bottom.jpg -------------------------------------------------------------------------------- /Images/esp-wroom-03_top.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sparkfun/ESP32_Miscellany/a854269104a25ddc7c1e1849b14892d56f250e37/Images/esp-wroom-03_top.jpg -------------------------------------------------------------------------------- /Images/esp32-block-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sparkfun/ESP32_Miscellany/a854269104a25ddc7c1e1849b14892d56f250e37/Images/esp32-block-diagram.png -------------------------------------------------------------------------------- /Images/esp32-breadboard-circuit-angle.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sparkfun/ESP32_Miscellany/a854269104a25ddc7c1e1849b14892d56f250e37/Images/esp32-breadboard-circuit-angle.jpg -------------------------------------------------------------------------------- /Images/esp32-breadboard-circuit-top.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sparkfun/ESP32_Miscellany/a854269104a25ddc7c1e1849b14892d56f250e37/Images/esp32-breadboard-circuit-top.jpg -------------------------------------------------------------------------------- /Images/esp32-wroom-03-graphical-datasheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sparkfun/ESP32_Miscellany/a854269104a25ddc7c1e1849b14892d56f250e37/Images/esp32-wroom-03-graphical-datasheet.png -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sparkfun/ESP32_Miscellany/a854269104a25ddc7c1e1849b14892d56f250e37/LICENSE.md -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ESP32 Miscellany 2 | ======================================== 3 | 4 | ![ESP-WROOM-03 Module soldered on a testbed](https://raw.githubusercontent.com/sparkfun/ESP32_Miscellany/master/Images/esp-wroom-03-development-board.jpg?token=AAVU8VnaZhnPwznvwd6Bo5_PjW-ztZPdks5WqUD6wA%3D%3D) 5 | 6 | All sorts of miscellaneous files to support Espressif's ESP31B, ESP32, and the ESP-WROOM-03 module. You'll find everything from pictures to hardware diagrams to example code. 7 | 8 | Repository Contents 9 | ------------------- 10 | 11 | * **/Documentation** - Data sheets, additional product information 12 | * **/Firmware** - Example code 13 | * **/Fritzing** - Fritzing parts and an example circuit 14 | * **/Graphical Datasheet** - Graphical datasheet (plus the source) of the ESP31B ESP-WROOM-03 module. 15 | * **/Hardware** - Eagle library parts 16 | * **/Images** - Photos and images related to the ESP32 17 | 18 | License Information 19 | ------------------- 20 | 21 | These files are _**open source**_! 22 | 23 | Please review the LICENSE.md file for license information. 24 | 25 | If you have any questions or concerns on licensing, please contact techsupport@sparkfun.com. 26 | 27 | Distributed as-is; no warranty is given. 28 | 29 | - Your friends at SparkFun. 30 | --------------------------------------------------------------------------------