├── OLED_Ether_demo ├── Makefile ├── Makefile.txt ├── README.md ├── build │ ├── can │ │ ├── CAN.d │ │ ├── CAN.o │ │ ├── component_project_vars.mk │ │ └── libcan.a │ └── main │ │ ├── ethernet_example_main.c.bak.d │ │ └── ethernet_example_main.d ├── main │ ├── component.mk │ ├── ethernet_main.c │ ├── fonts.c │ ├── fonts.h │ ├── ssd1306.c │ ├── ssd1306.h │ ├── xi2c.c │ └── xi2c.h ├── sdkconfig └── sdkconfig.old └── README.md /OLED_Ether_demo/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # This is a project Makefile. It is assumed the directory this Makefile resides in is a 3 | # project subdirectory. 4 | # 5 | 6 | PROJECT_NAME := ethernet_demo 7 | 8 | include $(IDF_PATH)/make/project.mk 9 | 10 | -------------------------------------------------------------------------------- /OLED_Ether_demo/Makefile.txt: -------------------------------------------------------------------------------- 1 | # 2 | # This is a project Makefile. It is assumed the directory this Makefile resides in is a 3 | # project subdirectory. 4 | # 5 | 6 | PROJECT_NAME := ethernet_demo 7 | 8 | include $(IDF_PATH)/make/project.mk 9 | 10 | -------------------------------------------------------------------------------- /OLED_Ether_demo/README.md: -------------------------------------------------------------------------------- 1 | # ethernet Example 2 | 3 | Init ethernet interface and enable it ,then you can ping it if it got ip address. 4 | 5 | 6 | See the README.md file in the upper level 'examples' directory for more information about examples. 7 | -------------------------------------------------------------------------------- /OLED_Ether_demo/build/can/CAN.d: -------------------------------------------------------------------------------- 1 | CAN.o: /Users/kodera2t/esp/esp-idf/components/can/./CAN.c \ 2 | /Users/kodera2t/esp/esp-idf/components/can/include/CAN.h \ 3 | /Users/kodera2t/esp/esp-idf/components/newlib/include/stdint.h \ 4 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/_default_types.h \ 5 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/features.h \ 6 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/_intsup.h \ 7 | /Users/kodera2t/esp/esp-idf/components/can/include/CAN_config.h \ 8 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/FreeRTOS.h \ 9 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/reent.h \ 10 | /Users/kodera2t/esp/esp-idf/components/newlib/include/_ansi.h \ 11 | /Users/kodera2t/esp/esp-idf/components/newlib/include/newlib.h \ 12 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/config.h \ 13 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/ieeefp.h \ 14 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/core-isa.h \ 15 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/_types.h \ 16 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/_types.h \ 17 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/lock.h \ 18 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/FreeRTOSConfig.h \ 19 | /Users/kodera2t/esp/esp-idf/examples/ethernet/ethernet/build/include/sdkconfig.h \ 20 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/xtensa_config.h \ 21 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/hal.h \ 22 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/core.h \ 23 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/xtensa-versions.h \ 24 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/core-matmap.h \ 25 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/tie.h \ 26 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/system.h \ 27 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/xtensa_context.h \ 28 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/corebits.h \ 29 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/xtruntime-frames.h \ 30 | /Users/kodera2t/esp/esp-idf/components/newlib/include/stdlib.h \ 31 | /Users/kodera2t/esp/esp-idf/components/newlib/include/_ansi.h \ 32 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/cdefs.h \ 33 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/stdlib.h \ 34 | /Users/kodera2t/esp/esp-idf/components/newlib/include/alloca.h \ 35 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/ets_sys.h \ 36 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/soc.h \ 37 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/projdefs.h \ 38 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/portable.h \ 39 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/deprecated_definitions.h \ 40 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/portmacro.h \ 41 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/tie/xt_core.h \ 42 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/xtruntime.h \ 43 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/specreg.h \ 44 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/xtruntime-core-state.h \ 45 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_crosscore_int.h \ 46 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/portbenchmark.h \ 47 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/mpu_wrappers.h \ 48 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/queue.h \ 49 | /Users/kodera2t/esp/esp-idf/components/driver/include/driver/gpio.h \ 50 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_err.h \ 51 | /Users/kodera2t/esp/esp-idf/components/newlib/include/stdio.h \ 52 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/types.h \ 53 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/types.h \ 54 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/stdio.h \ 55 | /Users/kodera2t/esp/esp-idf/components/newlib/include/assert.h \ 56 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_types.h \ 57 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/gpio_reg.h \ 58 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/soc.h \ 59 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/gpio_struct.h \ 60 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/rtc_io_reg.h \ 61 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/io_mux_reg.h \ 62 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/gpio_sig_map.h \ 63 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/gpio.h \ 64 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_attr.h \ 65 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_intr_alloc.h \ 66 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_intr.h \ 67 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/ets_sys.h \ 68 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/xtensa_api.h \ 69 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/dport_reg.h \ 70 | /Users/kodera2t/esp/esp-idf/components/newlib/include/math.h \ 71 | /Users/kodera2t/esp/esp-idf/components/can/include/can_regdef.h \ 72 | /Users/kodera2t/esp/esp-idf/components/can/include/CAN_config.h 73 | 74 | /Users/kodera2t/esp/esp-idf/components/can/include/CAN.h: 75 | 76 | /Users/kodera2t/esp/esp-idf/components/newlib/include/stdint.h: 77 | 78 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/_default_types.h: 79 | 80 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/features.h: 81 | 82 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/_intsup.h: 83 | 84 | /Users/kodera2t/esp/esp-idf/components/can/include/CAN_config.h: 85 | 86 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/FreeRTOS.h: 87 | 88 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/reent.h: 89 | 90 | /Users/kodera2t/esp/esp-idf/components/newlib/include/_ansi.h: 91 | 92 | /Users/kodera2t/esp/esp-idf/components/newlib/include/newlib.h: 93 | 94 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/config.h: 95 | 96 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/ieeefp.h: 97 | 98 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/core-isa.h: 99 | 100 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/_types.h: 101 | 102 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/_types.h: 103 | 104 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/lock.h: 105 | 106 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/FreeRTOSConfig.h: 107 | 108 | /Users/kodera2t/esp/esp-idf/examples/ethernet/ethernet/build/include/sdkconfig.h: 109 | 110 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/xtensa_config.h: 111 | 112 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/hal.h: 113 | 114 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/core.h: 115 | 116 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/xtensa-versions.h: 117 | 118 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/core-matmap.h: 119 | 120 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/tie.h: 121 | 122 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/system.h: 123 | 124 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/xtensa_context.h: 125 | 126 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/corebits.h: 127 | 128 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/xtruntime-frames.h: 129 | 130 | /Users/kodera2t/esp/esp-idf/components/newlib/include/stdlib.h: 131 | 132 | /Users/kodera2t/esp/esp-idf/components/newlib/include/_ansi.h: 133 | 134 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/cdefs.h: 135 | 136 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/stdlib.h: 137 | 138 | /Users/kodera2t/esp/esp-idf/components/newlib/include/alloca.h: 139 | 140 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/ets_sys.h: 141 | 142 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/soc.h: 143 | 144 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/projdefs.h: 145 | 146 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/portable.h: 147 | 148 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/deprecated_definitions.h: 149 | 150 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/portmacro.h: 151 | 152 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/tie/xt_core.h: 153 | 154 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/xtruntime.h: 155 | 156 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/specreg.h: 157 | 158 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/xtruntime-core-state.h: 159 | 160 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_crosscore_int.h: 161 | 162 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/portbenchmark.h: 163 | 164 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/mpu_wrappers.h: 165 | 166 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/queue.h: 167 | 168 | /Users/kodera2t/esp/esp-idf/components/driver/include/driver/gpio.h: 169 | 170 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_err.h: 171 | 172 | /Users/kodera2t/esp/esp-idf/components/newlib/include/stdio.h: 173 | 174 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/types.h: 175 | 176 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/types.h: 177 | 178 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/stdio.h: 179 | 180 | /Users/kodera2t/esp/esp-idf/components/newlib/include/assert.h: 181 | 182 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_types.h: 183 | 184 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/gpio_reg.h: 185 | 186 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/soc.h: 187 | 188 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/gpio_struct.h: 189 | 190 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/rtc_io_reg.h: 191 | 192 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/io_mux_reg.h: 193 | 194 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/gpio_sig_map.h: 195 | 196 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/gpio.h: 197 | 198 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_attr.h: 199 | 200 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_intr_alloc.h: 201 | 202 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_intr.h: 203 | 204 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/ets_sys.h: 205 | 206 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/xtensa_api.h: 207 | 208 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/dport_reg.h: 209 | 210 | /Users/kodera2t/esp/esp-idf/components/newlib/include/math.h: 211 | 212 | /Users/kodera2t/esp/esp-idf/components/can/include/can_regdef.h: 213 | 214 | /Users/kodera2t/esp/esp-idf/components/can/include/CAN_config.h: 215 | -------------------------------------------------------------------------------- /OLED_Ether_demo/build/can/CAN.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodera2t/ESP32_OLED_LAN8720_sample/dde45e72fae3dea839df6e79a5db9b4a13fe64af/OLED_Ether_demo/build/can/CAN.o -------------------------------------------------------------------------------- /OLED_Ether_demo/build/can/component_project_vars.mk: -------------------------------------------------------------------------------- 1 | # Automatically generated build file. Do not edit. 2 | COMPONENT_INCLUDES += $(IDF_PATH)/components/can/include 3 | COMPONENT_LDFLAGS += -lcan 4 | COMPONENT_LINKER_DEPS += 5 | COMPONENT_SUBMODULES += 6 | can-build: 7 | -------------------------------------------------------------------------------- /OLED_Ether_demo/build/can/libcan.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodera2t/ESP32_OLED_LAN8720_sample/dde45e72fae3dea839df6e79a5db9b4a13fe64af/OLED_Ether_demo/build/can/libcan.a -------------------------------------------------------------------------------- /OLED_Ether_demo/build/main/ethernet_example_main.c.bak.d: -------------------------------------------------------------------------------- 1 | ethernet_example_main.c.bak.o: \ 2 | /Users/kodera2t/esp/esp-idf/examples/ethernet/ethernet/main/./ethernet_example_main.c.bak.c \ 3 | /Users/kodera2t/esp/esp-idf/components/newlib/include/stdio.h \ 4 | /Users/kodera2t/esp/esp-idf/components/newlib/include/_ansi.h \ 5 | /Users/kodera2t/esp/esp-idf/components/newlib/include/newlib.h \ 6 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/config.h \ 7 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/ieeefp.h \ 8 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/features.h \ 9 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/core-isa.h \ 10 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/cdefs.h \ 11 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/_default_types.h \ 12 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/reent.h \ 13 | /Users/kodera2t/esp/esp-idf/components/newlib/include/_ansi.h \ 14 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/_types.h \ 15 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/_types.h \ 16 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/lock.h \ 17 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/types.h \ 18 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/types.h \ 19 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/stdio.h \ 20 | /Users/kodera2t/esp/esp-idf/components/newlib/include/string.h \ 21 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/string.h \ 22 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/FreeRTOS.h \ 23 | /Users/kodera2t/esp/esp-idf/components/newlib/include/stdint.h \ 24 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/_intsup.h \ 25 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/FreeRTOSConfig.h \ 26 | /Users/kodera2t/esp/esp-idf/examples/ethernet/ethernet/build/include/sdkconfig.h \ 27 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/xtensa_config.h \ 28 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/hal.h \ 29 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/core.h \ 30 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/xtensa-versions.h \ 31 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/core-matmap.h \ 32 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/tie.h \ 33 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/system.h \ 34 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/xtensa_context.h \ 35 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/corebits.h \ 36 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/xtruntime-frames.h \ 37 | /Users/kodera2t/esp/esp-idf/components/newlib/include/stdlib.h \ 38 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/stdlib.h \ 39 | /Users/kodera2t/esp/esp-idf/components/newlib/include/alloca.h \ 40 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/ets_sys.h \ 41 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/soc.h \ 42 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/projdefs.h \ 43 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/portable.h \ 44 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/deprecated_definitions.h \ 45 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/portmacro.h \ 46 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/tie/xt_core.h \ 47 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/xtruntime.h \ 48 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/specreg.h \ 49 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/xtruntime-core-state.h \ 50 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_crosscore_int.h \ 51 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/portbenchmark.h \ 52 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/mpu_wrappers.h \ 53 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/task.h \ 54 | /Users/kodera2t/esp/esp-idf/components/newlib/include/limits.h \ 55 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/list.h \ 56 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_system.h \ 57 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_err.h \ 58 | /Users/kodera2t/esp/esp-idf/components/newlib/include/assert.h \ 59 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_deep_sleep.h \ 60 | /Users/kodera2t/esp/esp-idf/components/driver/include/driver/gpio.h \ 61 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_types.h \ 62 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/gpio_reg.h \ 63 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/soc.h \ 64 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/gpio_struct.h \ 65 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/rtc_io_reg.h \ 66 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/io_mux_reg.h \ 67 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/gpio_sig_map.h \ 68 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/gpio.h \ 69 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_attr.h \ 70 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_intr_alloc.h \ 71 | /Users/kodera2t/esp/esp-idf/components/driver/include/driver/touch_pad.h \ 72 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_intr.h \ 73 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/ets_sys.h \ 74 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/xtensa_api.h \ 75 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_event_loop.h \ 76 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_event.h \ 77 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_wifi_types.h \ 78 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/queue.h \ 79 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_interface.h \ 80 | /Users/kodera2t/esp/esp-idf/components/tcpip_adapter/include/tcpip_adapter.h \ 81 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/queue.h \ 82 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_wifi_types.h \ 83 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/ip_addr.h \ 84 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/opt.h \ 85 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/port/lwipopts.h \ 86 | /Users/kodera2t/esp/esp-idf/components/newlib/include/time.h \ 87 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/time.h \ 88 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/time.h \ 89 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/fcntl.h \ 90 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/_default_fcntl.h \ 91 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/stat.h \ 92 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_task.h \ 93 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/debug.h \ 94 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/arch.h \ 95 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/port/arch/cc.h \ 96 | /Users/kodera2t/esp/esp-idf/components/newlib/include/errno.h \ 97 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/errno.h \ 98 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/port/arch/sys_arch.h \ 99 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/queue.h \ 100 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/semphr.h \ 101 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/queue.h \ 102 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/def.h \ 103 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/ip4_addr.h \ 104 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/ip6_addr.h \ 105 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/apps/dhcpserver.h \ 106 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_event.h \ 107 | /Users/kodera2t/esp/esp-idf/components/log/include/esp_log.h \ 108 | /Users/kodera2t/esp/esp-idf/components/ethernet/include/esp_eth.h \ 109 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/dport_reg.h \ 110 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/rtc_cntl_reg.h \ 111 | /Users/kodera2t/esp/esp-idf/components/nvs_flash/include/nvs_flash.h \ 112 | /Users/kodera2t/esp/esp-idf/examples/ethernet/ethernet/main/./tlk110_phy.h 113 | 114 | /Users/kodera2t/esp/esp-idf/components/newlib/include/stdio.h: 115 | 116 | /Users/kodera2t/esp/esp-idf/components/newlib/include/_ansi.h: 117 | 118 | /Users/kodera2t/esp/esp-idf/components/newlib/include/newlib.h: 119 | 120 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/config.h: 121 | 122 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/ieeefp.h: 123 | 124 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/features.h: 125 | 126 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/core-isa.h: 127 | 128 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/cdefs.h: 129 | 130 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/_default_types.h: 131 | 132 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/reent.h: 133 | 134 | /Users/kodera2t/esp/esp-idf/components/newlib/include/_ansi.h: 135 | 136 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/_types.h: 137 | 138 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/_types.h: 139 | 140 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/lock.h: 141 | 142 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/types.h: 143 | 144 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/types.h: 145 | 146 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/stdio.h: 147 | 148 | /Users/kodera2t/esp/esp-idf/components/newlib/include/string.h: 149 | 150 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/string.h: 151 | 152 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/FreeRTOS.h: 153 | 154 | /Users/kodera2t/esp/esp-idf/components/newlib/include/stdint.h: 155 | 156 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/_intsup.h: 157 | 158 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/FreeRTOSConfig.h: 159 | 160 | /Users/kodera2t/esp/esp-idf/examples/ethernet/ethernet/build/include/sdkconfig.h: 161 | 162 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/xtensa_config.h: 163 | 164 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/hal.h: 165 | 166 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/core.h: 167 | 168 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/xtensa-versions.h: 169 | 170 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/core-matmap.h: 171 | 172 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/tie.h: 173 | 174 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/system.h: 175 | 176 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/xtensa_context.h: 177 | 178 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/corebits.h: 179 | 180 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/xtruntime-frames.h: 181 | 182 | /Users/kodera2t/esp/esp-idf/components/newlib/include/stdlib.h: 183 | 184 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/stdlib.h: 185 | 186 | /Users/kodera2t/esp/esp-idf/components/newlib/include/alloca.h: 187 | 188 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/ets_sys.h: 189 | 190 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/soc.h: 191 | 192 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/projdefs.h: 193 | 194 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/portable.h: 195 | 196 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/deprecated_definitions.h: 197 | 198 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/portmacro.h: 199 | 200 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/tie/xt_core.h: 201 | 202 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/xtruntime.h: 203 | 204 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/specreg.h: 205 | 206 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/xtruntime-core-state.h: 207 | 208 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_crosscore_int.h: 209 | 210 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/portbenchmark.h: 211 | 212 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/mpu_wrappers.h: 213 | 214 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/task.h: 215 | 216 | /Users/kodera2t/esp/esp-idf/components/newlib/include/limits.h: 217 | 218 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/list.h: 219 | 220 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_system.h: 221 | 222 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_err.h: 223 | 224 | /Users/kodera2t/esp/esp-idf/components/newlib/include/assert.h: 225 | 226 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_deep_sleep.h: 227 | 228 | /Users/kodera2t/esp/esp-idf/components/driver/include/driver/gpio.h: 229 | 230 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_types.h: 231 | 232 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/gpio_reg.h: 233 | 234 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/soc.h: 235 | 236 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/gpio_struct.h: 237 | 238 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/rtc_io_reg.h: 239 | 240 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/io_mux_reg.h: 241 | 242 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/gpio_sig_map.h: 243 | 244 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/gpio.h: 245 | 246 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_attr.h: 247 | 248 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_intr_alloc.h: 249 | 250 | /Users/kodera2t/esp/esp-idf/components/driver/include/driver/touch_pad.h: 251 | 252 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_intr.h: 253 | 254 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/ets_sys.h: 255 | 256 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/xtensa_api.h: 257 | 258 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_event_loop.h: 259 | 260 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_event.h: 261 | 262 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_wifi_types.h: 263 | 264 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/queue.h: 265 | 266 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_interface.h: 267 | 268 | /Users/kodera2t/esp/esp-idf/components/tcpip_adapter/include/tcpip_adapter.h: 269 | 270 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/queue.h: 271 | 272 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_wifi_types.h: 273 | 274 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/ip_addr.h: 275 | 276 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/opt.h: 277 | 278 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/port/lwipopts.h: 279 | 280 | /Users/kodera2t/esp/esp-idf/components/newlib/include/time.h: 281 | 282 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/time.h: 283 | 284 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/time.h: 285 | 286 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/fcntl.h: 287 | 288 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/_default_fcntl.h: 289 | 290 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/stat.h: 291 | 292 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_task.h: 293 | 294 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/debug.h: 295 | 296 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/arch.h: 297 | 298 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/port/arch/cc.h: 299 | 300 | /Users/kodera2t/esp/esp-idf/components/newlib/include/errno.h: 301 | 302 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/errno.h: 303 | 304 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/port/arch/sys_arch.h: 305 | 306 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/queue.h: 307 | 308 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/semphr.h: 309 | 310 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/queue.h: 311 | 312 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/def.h: 313 | 314 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/ip4_addr.h: 315 | 316 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/ip6_addr.h: 317 | 318 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/apps/dhcpserver.h: 319 | 320 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_event.h: 321 | 322 | /Users/kodera2t/esp/esp-idf/components/log/include/esp_log.h: 323 | 324 | /Users/kodera2t/esp/esp-idf/components/ethernet/include/esp_eth.h: 325 | 326 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/dport_reg.h: 327 | 328 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/rtc_cntl_reg.h: 329 | 330 | /Users/kodera2t/esp/esp-idf/components/nvs_flash/include/nvs_flash.h: 331 | 332 | /Users/kodera2t/esp/esp-idf/examples/ethernet/ethernet/main/./tlk110_phy.h: 333 | -------------------------------------------------------------------------------- /OLED_Ether_demo/build/main/ethernet_example_main.d: -------------------------------------------------------------------------------- 1 | ethernet_example_main.o: \ 2 | /Users/kodera2t/esp/esp-idf/examples/ethernet/ethernet/main/./ethernet_example_main.c \ 3 | /Users/kodera2t/esp/esp-idf/components/newlib/include/stdio.h \ 4 | /Users/kodera2t/esp/esp-idf/components/newlib/include/_ansi.h \ 5 | /Users/kodera2t/esp/esp-idf/components/newlib/include/newlib.h \ 6 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/config.h \ 7 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/ieeefp.h \ 8 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/features.h \ 9 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/core-isa.h \ 10 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/cdefs.h \ 11 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/_default_types.h \ 12 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/reent.h \ 13 | /Users/kodera2t/esp/esp-idf/components/newlib/include/_ansi.h \ 14 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/_types.h \ 15 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/_types.h \ 16 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/lock.h \ 17 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/types.h \ 18 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/types.h \ 19 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/stdio.h \ 20 | /Users/kodera2t/esp/esp-idf/components/newlib/include/string.h \ 21 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/string.h \ 22 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/FreeRTOS.h \ 23 | /Users/kodera2t/esp/esp-idf/components/newlib/include/stdint.h \ 24 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/_intsup.h \ 25 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/FreeRTOSConfig.h \ 26 | /Users/kodera2t/esp/esp-idf/examples/ethernet/ethernet/build/include/sdkconfig.h \ 27 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/xtensa_config.h \ 28 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/hal.h \ 29 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/core.h \ 30 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/xtensa-versions.h \ 31 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/core-matmap.h \ 32 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/tie.h \ 33 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/system.h \ 34 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/xtensa_context.h \ 35 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/corebits.h \ 36 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/xtruntime-frames.h \ 37 | /Users/kodera2t/esp/esp-idf/components/newlib/include/stdlib.h \ 38 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/stdlib.h \ 39 | /Users/kodera2t/esp/esp-idf/components/newlib/include/alloca.h \ 40 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/ets_sys.h \ 41 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/soc.h \ 42 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/projdefs.h \ 43 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/portable.h \ 44 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/deprecated_definitions.h \ 45 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/portmacro.h \ 46 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/tie/xt_core.h \ 47 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/xtruntime.h \ 48 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/specreg.h \ 49 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/xtruntime-core-state.h \ 50 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_crosscore_int.h \ 51 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/portbenchmark.h \ 52 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/mpu_wrappers.h \ 53 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/task.h \ 54 | /Users/kodera2t/esp/esp-idf/components/newlib/include/limits.h \ 55 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/list.h \ 56 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_system.h \ 57 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_err.h \ 58 | /Users/kodera2t/esp/esp-idf/components/newlib/include/assert.h \ 59 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_deep_sleep.h \ 60 | /Users/kodera2t/esp/esp-idf/components/driver/include/driver/gpio.h \ 61 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_types.h \ 62 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/gpio_reg.h \ 63 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/soc.h \ 64 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/gpio_struct.h \ 65 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/rtc_io_reg.h \ 66 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/io_mux_reg.h \ 67 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/gpio_sig_map.h \ 68 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/gpio.h \ 69 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_attr.h \ 70 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_intr_alloc.h \ 71 | /Users/kodera2t/esp/esp-idf/components/driver/include/driver/touch_pad.h \ 72 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_intr.h \ 73 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/ets_sys.h \ 74 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/xtensa_api.h \ 75 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_event_loop.h \ 76 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_event.h \ 77 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_wifi_types.h \ 78 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/queue.h \ 79 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_interface.h \ 80 | /Users/kodera2t/esp/esp-idf/components/tcpip_adapter/include/tcpip_adapter.h \ 81 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/queue.h \ 82 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_wifi_types.h \ 83 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/ip_addr.h \ 84 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/opt.h \ 85 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/port/lwipopts.h \ 86 | /Users/kodera2t/esp/esp-idf/components/newlib/include/time.h \ 87 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/time.h \ 88 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/time.h \ 89 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/fcntl.h \ 90 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/_default_fcntl.h \ 91 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/stat.h \ 92 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_task.h \ 93 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/debug.h \ 94 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/arch.h \ 95 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/port/arch/cc.h \ 96 | /Users/kodera2t/esp/esp-idf/components/newlib/include/errno.h \ 97 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/errno.h \ 98 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/port/arch/sys_arch.h \ 99 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/queue.h \ 100 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/semphr.h \ 101 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/queue.h \ 102 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/def.h \ 103 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/ip4_addr.h \ 104 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/ip6_addr.h \ 105 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/apps/dhcpserver.h \ 106 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_event.h \ 107 | /Users/kodera2t/esp/esp-idf/components/log/include/esp_log.h \ 108 | /Users/kodera2t/esp/esp-idf/components/ethernet/include/esp_eth.h \ 109 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/dport_reg.h \ 110 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/rtc_cntl_reg.h \ 111 | /Users/kodera2t/esp/esp-idf/components/nvs_flash/include/nvs_flash.h \ 112 | /Users/kodera2t/esp/esp-idf/examples/ethernet/ethernet/main/./tlk110_phy.h 113 | 114 | /Users/kodera2t/esp/esp-idf/components/newlib/include/stdio.h: 115 | 116 | /Users/kodera2t/esp/esp-idf/components/newlib/include/_ansi.h: 117 | 118 | /Users/kodera2t/esp/esp-idf/components/newlib/include/newlib.h: 119 | 120 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/config.h: 121 | 122 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/ieeefp.h: 123 | 124 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/features.h: 125 | 126 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/core-isa.h: 127 | 128 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/cdefs.h: 129 | 130 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/_default_types.h: 131 | 132 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/reent.h: 133 | 134 | /Users/kodera2t/esp/esp-idf/components/newlib/include/_ansi.h: 135 | 136 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/_types.h: 137 | 138 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/_types.h: 139 | 140 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/lock.h: 141 | 142 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/types.h: 143 | 144 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/types.h: 145 | 146 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/stdio.h: 147 | 148 | /Users/kodera2t/esp/esp-idf/components/newlib/include/string.h: 149 | 150 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/string.h: 151 | 152 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/FreeRTOS.h: 153 | 154 | /Users/kodera2t/esp/esp-idf/components/newlib/include/stdint.h: 155 | 156 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/_intsup.h: 157 | 158 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/FreeRTOSConfig.h: 159 | 160 | /Users/kodera2t/esp/esp-idf/examples/ethernet/ethernet/build/include/sdkconfig.h: 161 | 162 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/xtensa_config.h: 163 | 164 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/hal.h: 165 | 166 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/core.h: 167 | 168 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/xtensa-versions.h: 169 | 170 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/core-matmap.h: 171 | 172 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/tie.h: 173 | 174 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/system.h: 175 | 176 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/xtensa_context.h: 177 | 178 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/corebits.h: 179 | 180 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/xtruntime-frames.h: 181 | 182 | /Users/kodera2t/esp/esp-idf/components/newlib/include/stdlib.h: 183 | 184 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/stdlib.h: 185 | 186 | /Users/kodera2t/esp/esp-idf/components/newlib/include/alloca.h: 187 | 188 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/ets_sys.h: 189 | 190 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/soc.h: 191 | 192 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/projdefs.h: 193 | 194 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/portable.h: 195 | 196 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/deprecated_definitions.h: 197 | 198 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/portmacro.h: 199 | 200 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/tie/xt_core.h: 201 | 202 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/xtruntime.h: 203 | 204 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/config/specreg.h: 205 | 206 | /Users/kodera2t/esp/esp-idf/components/esp32/include/xtensa/xtruntime-core-state.h: 207 | 208 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_crosscore_int.h: 209 | 210 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/portbenchmark.h: 211 | 212 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/mpu_wrappers.h: 213 | 214 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/task.h: 215 | 216 | /Users/kodera2t/esp/esp-idf/components/newlib/include/limits.h: 217 | 218 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/list.h: 219 | 220 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_system.h: 221 | 222 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_err.h: 223 | 224 | /Users/kodera2t/esp/esp-idf/components/newlib/include/assert.h: 225 | 226 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_deep_sleep.h: 227 | 228 | /Users/kodera2t/esp/esp-idf/components/driver/include/driver/gpio.h: 229 | 230 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_types.h: 231 | 232 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/gpio_reg.h: 233 | 234 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/soc.h: 235 | 236 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/gpio_struct.h: 237 | 238 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/rtc_io_reg.h: 239 | 240 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/io_mux_reg.h: 241 | 242 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/gpio_sig_map.h: 243 | 244 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/gpio.h: 245 | 246 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_attr.h: 247 | 248 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_intr_alloc.h: 249 | 250 | /Users/kodera2t/esp/esp-idf/components/driver/include/driver/touch_pad.h: 251 | 252 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_intr.h: 253 | 254 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/ets_sys.h: 255 | 256 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/xtensa_api.h: 257 | 258 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_event_loop.h: 259 | 260 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_event.h: 261 | 262 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_wifi_types.h: 263 | 264 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/queue.h: 265 | 266 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_interface.h: 267 | 268 | /Users/kodera2t/esp/esp-idf/components/tcpip_adapter/include/tcpip_adapter.h: 269 | 270 | /Users/kodera2t/esp/esp-idf/components/esp32/include/rom/queue.h: 271 | 272 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_wifi_types.h: 273 | 274 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/ip_addr.h: 275 | 276 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/opt.h: 277 | 278 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/port/lwipopts.h: 279 | 280 | /Users/kodera2t/esp/esp-idf/components/newlib/include/time.h: 281 | 282 | /Users/kodera2t/esp/esp-idf/components/newlib/include/machine/time.h: 283 | 284 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/time.h: 285 | 286 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/fcntl.h: 287 | 288 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/_default_fcntl.h: 289 | 290 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/stat.h: 291 | 292 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_task.h: 293 | 294 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/debug.h: 295 | 296 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/arch.h: 297 | 298 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/port/arch/cc.h: 299 | 300 | /Users/kodera2t/esp/esp-idf/components/newlib/include/errno.h: 301 | 302 | /Users/kodera2t/esp/esp-idf/components/newlib/include/sys/errno.h: 303 | 304 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/port/arch/sys_arch.h: 305 | 306 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/queue.h: 307 | 308 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/semphr.h: 309 | 310 | /Users/kodera2t/esp/esp-idf/components/freertos/include/freertos/queue.h: 311 | 312 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/def.h: 313 | 314 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/ip4_addr.h: 315 | 316 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/lwip/ip6_addr.h: 317 | 318 | /Users/kodera2t/esp/esp-idf/components/lwip/include/lwip/apps/dhcpserver.h: 319 | 320 | /Users/kodera2t/esp/esp-idf/components/esp32/include/esp_event.h: 321 | 322 | /Users/kodera2t/esp/esp-idf/components/log/include/esp_log.h: 323 | 324 | /Users/kodera2t/esp/esp-idf/components/ethernet/include/esp_eth.h: 325 | 326 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/dport_reg.h: 327 | 328 | /Users/kodera2t/esp/esp-idf/components/esp32/include/soc/rtc_cntl_reg.h: 329 | 330 | /Users/kodera2t/esp/esp-idf/components/nvs_flash/include/nvs_flash.h: 331 | 332 | /Users/kodera2t/esp/esp-idf/examples/ethernet/ethernet/main/./tlk110_phy.h: 333 | -------------------------------------------------------------------------------- /OLED_Ether_demo/main/component.mk: -------------------------------------------------------------------------------- 1 | # 2 | # "main" pseudo-component makefile. 3 | # 4 | # (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.) 5 | -------------------------------------------------------------------------------- /OLED_Ether_demo/main/ethernet_main.c: -------------------------------------------------------------------------------- 1 | /* ethernet Example 2 | 3 | This example code is in the Public Domain (or CC0 licensed, at your option.) 4 | 5 | Unless required by applicable law or agreed to in writing, this 6 | software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 7 | CONDITIONS OF ANY KIND, either express or implied. 8 | */ 9 | #include 10 | #include 11 | 12 | #include "freertos/FreeRTOS.h" 13 | #include "freertos/task.h" 14 | 15 | #include "esp_system.h" 16 | #include "esp_err.h" 17 | #include "esp_event_loop.h" 18 | #include "esp_event.h" 19 | #include "esp_attr.h" 20 | #include "esp_log.h" 21 | #include "esp_eth.h" 22 | 23 | #include "rom/ets_sys.h" 24 | #include "rom/gpio.h" 25 | 26 | #include "soc/dport_reg.h" 27 | #include "soc/io_mux_reg.h" 28 | #include "soc/rtc_cntl_reg.h" 29 | #include "soc/gpio_reg.h" 30 | #include "soc/gpio_sig_map.h" 31 | 32 | #include "tcpip_adapter.h" 33 | #include "nvs_flash.h" 34 | #include "driver/gpio.h" 35 | //#include "tlk110_phy.h" 36 | #include "driver/rtc_io.h" 37 | 38 | /////////// 39 | #include "driver/i2c.h" 40 | #include "esp_wifi.h" 41 | #include "xi2c.h" 42 | #include "fonts.h" 43 | #include "ssd1306.h" 44 | //////////// 45 | 46 | static const char *TAG = "eth_example"; 47 | 48 | #define DEFAULT_PHY_CONFIG (AUTO_MDIX_ENABLE|AUTO_NEGOTIATION_ENABLE|AN_1|AN_0|LED_CFG) 49 | #define PIN_PHY_POWER 17 50 | #define PIN_SMI_MDC 23 51 | #define PIN_SMI_MDIO 2 52 | #define PIN_CRS_DV 27 53 | #define PHY_RESET_CONTROL_REG (0x0) 54 | #define SOFTWARE_RESET BIT(15) 55 | #define SOFTWARE_AUTO_NEGTIATION BIT(12) 56 | 57 | #define BASIC_MODE_STATUS_REG (0x1) 58 | #define AUTO_NEGOTIATION_COMPLETE BIT(5) 59 | #define LINK_STATUS BIT(2) 60 | 61 | #define AUTO_NEG_ADVERTISEMENT_REG (0x4) 62 | #define ASM_DIR BIT(11) 63 | #define PAUSE BIT(10) 64 | 65 | #define PHY_LINK_PARTNER_ABILITY_REG (0x5) 66 | #define PARTNER_ASM_DIR BIT(11) 67 | #define PARTNER_PAUSE BIT(10) 68 | 69 | #define PHY_STATUS_REG (0x1f) 70 | #define AUTO_NEGTIATION_STATUS BIT(12) 71 | #define DUPLEX_STATUS BIT(4) 72 | #define SPEED_STATUS BIT(2) 73 | 74 | //////////////OLED definition//////////////////// 75 | #define I2C_EXAMPLE_MASTER_SCL_IO 14 /*!< gpio number for I2C master clock */ 76 | #define I2C_EXAMPLE_MASTER_SDA_IO 13 /*!< gpio number for I2C master data */ 77 | #define I2C_EXAMPLE_MASTER_NUM I2C_NUM_1 /*!< I2C port number for master dev */ 78 | #define I2C_EXAMPLE_MASTER_TX_BUF_DISABLE 0 /*!< I2C master do not need buffer */ 79 | #define I2C_EXAMPLE_MASTER_RX_BUF_DISABLE 0 /*!< I2C master do not need buffer */ 80 | #define I2C_EXAMPLE_MASTER_FREQ_HZ 100000 /*!< I2C master clock frequency */ 81 | 82 | xSemaphoreHandle print_mux; 83 | ///////////////////////////////////////////////// 84 | 85 | 86 | void display_address(uint16_t ip_param); 87 | 88 | 89 | void phy_tlk110_check_phy_init(void) 90 | { 91 | while((esp_eth_smi_read(BASIC_MODE_STATUS_REG) & AUTO_NEGOTIATION_COMPLETE ) != AUTO_NEGOTIATION_COMPLETE) 92 | {}; 93 | while((esp_eth_smi_read(PHY_STATUS_REG) & AUTO_NEGTIATION_STATUS ) != AUTO_NEGTIATION_STATUS) 94 | {}; 95 | } 96 | 97 | eth_speed_mode_t phy_tlk110_get_speed_mode(void) 98 | { 99 | if((esp_eth_smi_read(PHY_STATUS_REG) & SPEED_STATUS ) != SPEED_STATUS) { 100 | return ETH_SPEED_MODE_100M; 101 | } else { 102 | return ETH_SPEED_MODE_10M; 103 | } 104 | } 105 | 106 | eth_duplex_mode_t phy_tlk110_get_duplex_mode(void) 107 | { 108 | if((esp_eth_smi_read(PHY_STATUS_REG) & DUPLEX_STATUS ) == DUPLEX_STATUS) { 109 | return ETH_MODE_FULLDUPLEX; 110 | } else { 111 | return ETH_MODE_HALFDUPLEX; 112 | } 113 | } 114 | 115 | bool phy_tlk110_check_phy_link_status(void) 116 | { 117 | if((esp_eth_smi_read(BASIC_MODE_STATUS_REG) & LINK_STATUS) == LINK_STATUS ) { 118 | return true; 119 | } else { 120 | return false; 121 | } 122 | } 123 | 124 | bool phy_tlk110_get_partner_pause_enable(void) 125 | { 126 | if((esp_eth_smi_read(PHY_LINK_PARTNER_ABILITY_REG) & PARTNER_PAUSE) == PARTNER_PAUSE) { 127 | return true; 128 | } else { 129 | return false; 130 | } 131 | } 132 | 133 | void phy_enable_flow_ctrl(void) 134 | { 135 | uint32_t data = 0; 136 | data = esp_eth_smi_read(AUTO_NEG_ADVERTISEMENT_REG); 137 | esp_eth_smi_write(AUTO_NEG_ADVERTISEMENT_REG,data|ASM_DIR|PAUSE); 138 | } 139 | 140 | void phy_tlk110_power_enable(bool enable) 141 | { 142 | } 143 | 144 | void phy_tlk110_init(void) 145 | { 146 | gpio_set_level(GPIO_NUM_18, 0); 147 | vTaskDelay(100 / portTICK_PERIOD_MS); 148 | gpio_set_level(GPIO_NUM_18, 1); 149 | 150 | esp_eth_smi_write(PHY_RESET_CONTROL_REG, SOFTWARE_RESET); 151 | vTaskDelay(1000 / portTICK_PERIOD_MS); 152 | 153 | esp_eth_smi_write(PHY_RESET_CONTROL_REG, SOFTWARE_AUTO_NEGTIATION); 154 | vTaskDelay(100 / portTICK_PERIOD_MS); 155 | 156 | //if config.flow_ctrl_enable == true ,enable this 157 | phy_enable_flow_ctrl(); 158 | } 159 | 160 | void eth_gpio_config_rmii(void) 161 | { 162 | //txd0 to gpio19 ,can not change 163 | PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO19_U, FUNC_GPIO19_EMAC_TXD0); 164 | //tx_en to gpio21 ,can not change 165 | PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO21_U, FUNC_GPIO21_EMAC_TX_EN); 166 | //txd1 to gpio22 , can not change 167 | PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO22_U, FUNC_GPIO22_EMAC_TXD1); 168 | //rxd0 to gpio25 , can not change 169 | gpio_set_direction(25, GPIO_MODE_INPUT); 170 | //rxd1 to gpio26 ,can not change 171 | gpio_set_direction(26, GPIO_MODE_INPUT); 172 | //rmii clk ,can not change 173 | gpio_set_direction(0, GPIO_MODE_INPUT); 174 | 175 | //if(RTC_GPIO_IS_VALID_GPIO(GPIO_NUM_23)) rtc_gpio_deinit(GPIO_NUM_23); 176 | //if(RTC_GPIO_IS_VALID_GPIO(GPIO_NUM_2)) rtc_gpio_deinit(GPIO_NUM_2); 177 | if(RTC_GPIO_IS_VALID_GPIO(GPIO_NUM_23)) rtc_gpio_deinit(GPIO_NUM_23); 178 | if(RTC_GPIO_IS_VALID_GPIO(GPIO_NUM_2)) rtc_gpio_deinit(GPIO_NUM_2); 179 | PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[GPIO_NUM_23], PIN_FUNC_GPIO); 180 | gpio_set_pull_mode(GPIO_NUM_23, GPIO_PULLUP_ONLY); 181 | gpio_set_direction(GPIO_NUM_23, GPIO_MODE_OUTPUT); 182 | gpio_matrix_out(GPIO_NUM_23, EMAC_MDC_O_IDX, 0, 0); 183 | PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[GPIO_NUM_2], PIN_FUNC_GPIO); 184 | gpio_set_pull_mode(GPIO_NUM_2, GPIO_PULLUP_ONLY); 185 | gpio_set_direction(GPIO_NUM_2, GPIO_MODE_INPUT_OUTPUT); 186 | gpio_matrix_in(GPIO_NUM_2, EMAC_MDI_I_IDX, 0); 187 | gpio_matrix_out(GPIO_NUM_2, EMAC_MDO_O_IDX, 0, 0); 188 | 189 | if(RTC_GPIO_IS_VALID_GPIO(GPIO_NUM_18)) rtc_gpio_deinit(GPIO_NUM_18); 190 | PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[GPIO_NUM_18], PIN_FUNC_GPIO); 191 | gpio_set_pull_mode(GPIO_NUM_18, GPIO_PULLUP_ONLY); 192 | gpio_set_level(GPIO_NUM_18, 1); 193 | gpio_set_direction(GPIO_NUM_18, GPIO_MODE_OUTPUT); 194 | gpio_matrix_out(GPIO_NUM_18, SIG_GPIO_OUT_IDX, 0, 0); 195 | } 196 | void eth_task(void *pvParameter) 197 | { 198 | tcpip_adapter_ip_info_t ip; 199 | memset(&ip, 0, sizeof(tcpip_adapter_ip_info_t)); 200 | vTaskDelay(2000 / portTICK_PERIOD_MS); 201 | char ip_str[4]; 202 | 203 | while (1) { 204 | 205 | vTaskDelay(2000 / portTICK_PERIOD_MS); 206 | SSD1306_GotoXY(2,4); 207 | SSD1306_Puts("ESP32 Monster brd",&Font_7x10, SSD1306_COLOR_WHITE); 208 | 209 | if (tcpip_adapter_get_ip_info(ESP_IF_ETH, &ip) == 0) { 210 | ESP_LOGI(TAG, "\n~~~~~~~~~~~\n"); 211 | ESP_LOGI(TAG, "ETHIP:"IPSTR, IP2STR(&ip.ip)); 212 | ESP_LOGI(TAG, "ETHPMASK:"IPSTR, IP2STR(&ip.netmask)); 213 | ESP_LOGI(TAG, "ETHPGW:"IPSTR, IP2STR(&ip.gw)); 214 | ESP_LOGI(TAG, "\n~~~~~~~~~~~\n"); 215 | /////////// 216 | 217 | SSD1306_GotoXY(4, 16); 218 | SSD1306_Puts("IP:",&Font_7x10, SSD1306_COLOR_WHITE); 219 | display_address(ip4_addr1_16(&ip.ip)); 220 | display_address(ip4_addr2_16(&ip.ip)); 221 | display_address(ip4_addr3_16(&ip.ip)); 222 | display_address(ip4_addr4_16(&ip.ip)); 223 | 224 | SSD1306_GotoXY(4, 25); 225 | SSD1306_Puts("MK:",&Font_7x10, SSD1306_COLOR_WHITE); 226 | display_address(ip4_addr1_16(&ip.netmask)); 227 | display_address(ip4_addr2_16(&ip.netmask)); 228 | display_address(ip4_addr3_16(&ip.netmask)); 229 | display_address(ip4_addr4_16(&ip.netmask)); 230 | 231 | SSD1306_GotoXY(4, 34); 232 | SSD1306_Puts("GW:",&Font_7x10, SSD1306_COLOR_WHITE); 233 | display_address(ip4_addr1_16(&ip.gw)); 234 | display_address(ip4_addr2_16(&ip.gw)); 235 | display_address(ip4_addr3_16(&ip.gw)); 236 | display_address(ip4_addr4_16(&ip.gw)); 237 | 238 | SSD1306_GotoXY(4, 45); 239 | SSD1306_Puts("Ether connected!",&Font_7x10, SSD1306_COLOR_WHITE); 240 | 241 | 242 | /* Update screen, send changes to LCD */ 243 | SSD1306_UpdateScreen(); 244 | 245 | 246 | } 247 | } 248 | } 249 | 250 | void display_address(uint16_t ip_param){ 251 | char ip_str2[4]; 252 | sprintf(ip_str2,"%d",ip_param); 253 | SSD1306_Puts(ip_str2, &Font_7x10, SSD1306_COLOR_WHITE); 254 | SSD1306_Puts(".",&Font_7x10, SSD1306_COLOR_WHITE); 255 | } 256 | 257 | 258 | void i2c_test(void) 259 | { 260 | SSD1306_GotoXY(40, 4); 261 | SSD1306_Puts("ESP32", &Font_7x10, SSD1306_COLOR_WHITE); 262 | 263 | /* Go to location X = 20, Y = 25 */ 264 | SSD1306_GotoXY(8, 25); 265 | SSD1306_Puts("I2C SH1106 OLED", &Font_7x10, SSD1306_COLOR_WHITE); 266 | 267 | /* Go to location X = 15, Y = 45 */ 268 | SSD1306_GotoXY(20, 45); 269 | SSD1306_Puts("Akbar Hashim", &Font_7x10, SSD1306_COLOR_WHITE); 270 | 271 | /* Update screen, send changes to LCD */ 272 | SSD1306_UpdateScreen(); 273 | 274 | // while (1) { 275 | // /* Invert pixels */ 276 | // SSD1306_ToggleInvert(); 277 | 278 | /* Update screen */ 279 | // SSD1306_UpdateScreen(); 280 | 281 | /* Make a little delay */ 282 | // vTaskDelay(50); 283 | // } 284 | 285 | } 286 | 287 | /** 288 | * @brief i2c master initialization 289 | */ 290 | void i2c_example_master_init() 291 | { 292 | int i2c_master_port = I2C_EXAMPLE_MASTER_NUM; 293 | i2c_config_t conf; 294 | conf.mode = I2C_MODE_MASTER; 295 | conf.sda_io_num = I2C_EXAMPLE_MASTER_SDA_IO; 296 | conf.sda_pullup_en = GPIO_PULLUP_ENABLE; 297 | conf.scl_io_num = I2C_EXAMPLE_MASTER_SCL_IO; 298 | conf.scl_pullup_en = GPIO_PULLUP_ENABLE; 299 | conf.master.clk_speed = I2C_EXAMPLE_MASTER_FREQ_HZ; 300 | i2c_param_config(i2c_master_port, &conf); 301 | i2c_driver_install(i2c_master_port, conf.mode, 302 | I2C_EXAMPLE_MASTER_RX_BUF_DISABLE, 303 | I2C_EXAMPLE_MASTER_TX_BUF_DISABLE, 0); 304 | } 305 | 306 | 307 | void app_main() 308 | { 309 | print_mux = xSemaphoreCreateMutex(); 310 | i2c_example_master_init(); 311 | SSD1306_Init(); 312 | esp_err_t ret = ESP_OK; 313 | tcpip_adapter_init(); 314 | esp_event_loop_init(NULL, NULL); 315 | 316 | eth_config_t config; 317 | config.phy_addr = PHY1; 318 | config.mac_mode = ETH_MODE_RMII; 319 | config.phy_init = phy_tlk110_init; 320 | config.gpio_config = eth_gpio_config_rmii; 321 | config.tcpip_input = tcpip_adapter_eth_input; 322 | config.phy_check_init = phy_tlk110_check_phy_init; 323 | config.phy_check_link = phy_tlk110_check_phy_link_status; 324 | config.phy_get_speed_mode = phy_tlk110_get_speed_mode; 325 | config.phy_get_duplex_mode = phy_tlk110_get_duplex_mode; 326 | //Only FULLDUPLEX mode support flow ctrl now! 327 | config.flow_ctrl_enable = true; 328 | config.phy_get_partner_pause_enable = phy_tlk110_get_partner_pause_enable; 329 | config.phy_power_enable = phy_tlk110_power_enable; 330 | 331 | ret = esp_eth_init(&config); 332 | 333 | if(ret == ESP_OK) { 334 | esp_eth_enable(); 335 | xTaskCreate(eth_task, "eth_task", 2048, NULL, (tskIDLE_PRIORITY + 2), NULL); 336 | } 337 | 338 | } 339 | 340 | 341 | 342 | //void app_main() 343 | //{ 344 | // print_mux = xSemaphoreCreateMutex(); 345 | // i2c_example_master_init(); 346 | // SSD1306_Init(); 347 | 348 | // xTaskCreate(i2c_test, "i2c_test", 1024, NULL, 10, NULL); 349 | //} 350 | 351 | -------------------------------------------------------------------------------- /OLED_Ether_demo/main/fonts.c: -------------------------------------------------------------------------------- 1 | #include "fonts.h" 2 | 3 | const uint16_t Font7x10 [] = { 4 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // sp 5 | 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x1000, 0x0000, 0x0000, // ! 6 | 0x2800, 0x2800, 0x2800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // " 7 | 0x2400, 0x2400, 0x7C00, 0x2400, 0x4800, 0x7C00, 0x4800, 0x4800, 0x0000, 0x0000, // # 8 | 0x3800, 0x5400, 0x5000, 0x3800, 0x1400, 0x5400, 0x5400, 0x3800, 0x1000, 0x0000, // $ 9 | 0x2000, 0x5400, 0x5800, 0x3000, 0x2800, 0x5400, 0x1400, 0x0800, 0x0000, 0x0000, // % 10 | 0x1000, 0x2800, 0x2800, 0x1000, 0x3400, 0x4800, 0x4800, 0x3400, 0x0000, 0x0000, // & 11 | 0x1000, 0x1000, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // ' 12 | 0x0800, 0x1000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x1000, 0x0800, // ( 13 | 0x2000, 0x1000, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x1000, 0x2000, // ) 14 | 0x1000, 0x3800, 0x1000, 0x2800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // * 15 | 0x0000, 0x0000, 0x1000, 0x1000, 0x7C00, 0x1000, 0x1000, 0x0000, 0x0000, 0x0000, // + 16 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1000, 0x1000, 0x1000, // , 17 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3800, 0x0000, 0x0000, 0x0000, 0x0000, // - 18 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1000, 0x0000, 0x0000, // . 19 | 0x0800, 0x0800, 0x1000, 0x1000, 0x1000, 0x1000, 0x2000, 0x2000, 0x0000, 0x0000, // / 20 | 0x3800, 0x4400, 0x4400, 0x5400, 0x4400, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000, // 0 21 | 0x1000, 0x3000, 0x5000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x0000, // 1 22 | 0x3800, 0x4400, 0x4400, 0x0400, 0x0800, 0x1000, 0x2000, 0x7C00, 0x0000, 0x0000, // 2 23 | 0x3800, 0x4400, 0x0400, 0x1800, 0x0400, 0x0400, 0x4400, 0x3800, 0x0000, 0x0000, // 3 24 | 0x0800, 0x1800, 0x2800, 0x2800, 0x4800, 0x7C00, 0x0800, 0x0800, 0x0000, 0x0000, // 4 25 | 0x7C00, 0x4000, 0x4000, 0x7800, 0x0400, 0x0400, 0x4400, 0x3800, 0x0000, 0x0000, // 5 26 | 0x3800, 0x4400, 0x4000, 0x7800, 0x4400, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000, // 6 27 | 0x7C00, 0x0400, 0x0800, 0x1000, 0x1000, 0x2000, 0x2000, 0x2000, 0x0000, 0x0000, // 7 28 | 0x3800, 0x4400, 0x4400, 0x3800, 0x4400, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000, // 8 29 | 0x3800, 0x4400, 0x4400, 0x4400, 0x3C00, 0x0400, 0x4400, 0x3800, 0x0000, 0x0000, // 9 30 | 0x0000, 0x0000, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1000, 0x0000, 0x0000, // : 31 | 0x0000, 0x0000, 0x0000, 0x1000, 0x0000, 0x0000, 0x0000, 0x1000, 0x1000, 0x1000, // ; 32 | 0x0000, 0x0000, 0x0C00, 0x3000, 0x4000, 0x3000, 0x0C00, 0x0000, 0x0000, 0x0000, // < 33 | 0x0000, 0x0000, 0x0000, 0x7C00, 0x0000, 0x7C00, 0x0000, 0x0000, 0x0000, 0x0000, // = 34 | 0x0000, 0x0000, 0x6000, 0x1800, 0x0400, 0x1800, 0x6000, 0x0000, 0x0000, 0x0000, // > 35 | 0x3800, 0x4400, 0x0400, 0x0800, 0x1000, 0x1000, 0x0000, 0x1000, 0x0000, 0x0000, // ? 36 | 0x3800, 0x4400, 0x4C00, 0x5400, 0x5C00, 0x4000, 0x4000, 0x3800, 0x0000, 0x0000, // @ 37 | 0x1000, 0x2800, 0x2800, 0x2800, 0x2800, 0x7C00, 0x4400, 0x4400, 0x0000, 0x0000, // A 38 | 0x7800, 0x4400, 0x4400, 0x7800, 0x4400, 0x4400, 0x4400, 0x7800, 0x0000, 0x0000, // B 39 | 0x3800, 0x4400, 0x4000, 0x4000, 0x4000, 0x4000, 0x4400, 0x3800, 0x0000, 0x0000, // C 40 | 0x7000, 0x4800, 0x4400, 0x4400, 0x4400, 0x4400, 0x4800, 0x7000, 0x0000, 0x0000, // D 41 | 0x7C00, 0x4000, 0x4000, 0x7C00, 0x4000, 0x4000, 0x4000, 0x7C00, 0x0000, 0x0000, // E 42 | 0x7C00, 0x4000, 0x4000, 0x7800, 0x4000, 0x4000, 0x4000, 0x4000, 0x0000, 0x0000, // F 43 | 0x3800, 0x4400, 0x4000, 0x4000, 0x5C00, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000, // G 44 | 0x4400, 0x4400, 0x4400, 0x7C00, 0x4400, 0x4400, 0x4400, 0x4400, 0x0000, 0x0000, // H 45 | 0x3800, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x3800, 0x0000, 0x0000, // I 46 | 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x4400, 0x3800, 0x0000, 0x0000, // J 47 | 0x4400, 0x4800, 0x5000, 0x6000, 0x5000, 0x4800, 0x4800, 0x4400, 0x0000, 0x0000, // K 48 | 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x7C00, 0x0000, 0x0000, // L 49 | 0x4400, 0x6C00, 0x6C00, 0x5400, 0x4400, 0x4400, 0x4400, 0x4400, 0x0000, 0x0000, // M 50 | 0x4400, 0x6400, 0x6400, 0x5400, 0x5400, 0x4C00, 0x4C00, 0x4400, 0x0000, 0x0000, // N 51 | 0x3800, 0x4400, 0x4400, 0x4400, 0x4400, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000, // O 52 | 0x7800, 0x4400, 0x4400, 0x4400, 0x7800, 0x4000, 0x4000, 0x4000, 0x0000, 0x0000, // P 53 | 0x3800, 0x4400, 0x4400, 0x4400, 0x4400, 0x4400, 0x5400, 0x3800, 0x0400, 0x0000, // Q 54 | 0x7800, 0x4400, 0x4400, 0x4400, 0x7800, 0x4800, 0x4800, 0x4400, 0x0000, 0x0000, // R 55 | 0x3800, 0x4400, 0x4000, 0x3000, 0x0800, 0x0400, 0x4400, 0x3800, 0x0000, 0x0000, // S 56 | 0x7C00, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x0000, // T 57 | 0x4400, 0x4400, 0x4400, 0x4400, 0x4400, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000, // U 58 | 0x4400, 0x4400, 0x4400, 0x2800, 0x2800, 0x2800, 0x1000, 0x1000, 0x0000, 0x0000, // V 59 | 0x4400, 0x4400, 0x5400, 0x5400, 0x5400, 0x6C00, 0x2800, 0x2800, 0x0000, 0x0000, // W 60 | 0x4400, 0x2800, 0x2800, 0x1000, 0x1000, 0x2800, 0x2800, 0x4400, 0x0000, 0x0000, // X 61 | 0x4400, 0x4400, 0x2800, 0x2800, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x0000, // Y 62 | 0x7C00, 0x0400, 0x0800, 0x1000, 0x1000, 0x2000, 0x4000, 0x7C00, 0x0000, 0x0000, // Z 63 | 0x1800, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1800, // [ 64 | 0x2000, 0x2000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0800, 0x0800, 0x0000, 0x0000, /* \ */ 65 | 0x3000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x3000, // ] 66 | 0x1000, 0x2800, 0x2800, 0x4400, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // ^ 67 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFE00, // _ 68 | 0x2000, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // ` 69 | 0x0000, 0x0000, 0x3800, 0x4400, 0x3C00, 0x4400, 0x4C00, 0x3400, 0x0000, 0x0000, // a 70 | 0x4000, 0x4000, 0x5800, 0x6400, 0x4400, 0x4400, 0x6400, 0x5800, 0x0000, 0x0000, // b 71 | 0x0000, 0x0000, 0x3800, 0x4400, 0x4000, 0x4000, 0x4400, 0x3800, 0x0000, 0x0000, // c 72 | 0x0400, 0x0400, 0x3400, 0x4C00, 0x4400, 0x4400, 0x4C00, 0x3400, 0x0000, 0x0000, // d 73 | 0x0000, 0x0000, 0x3800, 0x4400, 0x7C00, 0x4000, 0x4400, 0x3800, 0x0000, 0x0000, // e 74 | 0x0C00, 0x1000, 0x7C00, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x0000, // f 75 | 0x0000, 0x0000, 0x3400, 0x4C00, 0x4400, 0x4400, 0x4C00, 0x3400, 0x0400, 0x7800, // g 76 | 0x4000, 0x4000, 0x5800, 0x6400, 0x4400, 0x4400, 0x4400, 0x4400, 0x0000, 0x0000, // h 77 | 0x1000, 0x0000, 0x7000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x0000, // i 78 | 0x1000, 0x0000, 0x7000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0xE000, // j 79 | 0x4000, 0x4000, 0x4800, 0x5000, 0x6000, 0x5000, 0x4800, 0x4400, 0x0000, 0x0000, // k 80 | 0x7000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x0000, // l 81 | 0x0000, 0x0000, 0x7800, 0x5400, 0x5400, 0x5400, 0x5400, 0x5400, 0x0000, 0x0000, // m 82 | 0x0000, 0x0000, 0x5800, 0x6400, 0x4400, 0x4400, 0x4400, 0x4400, 0x0000, 0x0000, // n 83 | 0x0000, 0x0000, 0x3800, 0x4400, 0x4400, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000, // o 84 | 0x0000, 0x0000, 0x5800, 0x6400, 0x4400, 0x4400, 0x6400, 0x5800, 0x4000, 0x4000, // p 85 | 0x0000, 0x0000, 0x3400, 0x4C00, 0x4400, 0x4400, 0x4C00, 0x3400, 0x0400, 0x0400, // q 86 | 0x0000, 0x0000, 0x5800, 0x6400, 0x4000, 0x4000, 0x4000, 0x4000, 0x0000, 0x0000, // r 87 | 0x0000, 0x0000, 0x3800, 0x4400, 0x3000, 0x0800, 0x4400, 0x3800, 0x0000, 0x0000, // s 88 | 0x2000, 0x2000, 0x7800, 0x2000, 0x2000, 0x2000, 0x2000, 0x1800, 0x0000, 0x0000, // t 89 | 0x0000, 0x0000, 0x4400, 0x4400, 0x4400, 0x4400, 0x4C00, 0x3400, 0x0000, 0x0000, // u 90 | 0x0000, 0x0000, 0x4400, 0x4400, 0x2800, 0x2800, 0x2800, 0x1000, 0x0000, 0x0000, // v 91 | 0x0000, 0x0000, 0x5400, 0x5400, 0x5400, 0x6C00, 0x2800, 0x2800, 0x0000, 0x0000, // w 92 | 0x0000, 0x0000, 0x4400, 0x2800, 0x1000, 0x1000, 0x2800, 0x4400, 0x0000, 0x0000, // x 93 | 0x0000, 0x0000, 0x4400, 0x4400, 0x2800, 0x2800, 0x1000, 0x1000, 0x1000, 0x6000, // y 94 | 0x0000, 0x0000, 0x7C00, 0x0800, 0x1000, 0x2000, 0x4000, 0x7C00, 0x0000, 0x0000, // z 95 | 0x1800, 0x1000, 0x1000, 0x1000, 0x2000, 0x2000, 0x1000, 0x1000, 0x1000, 0x1800, // { 96 | 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, // | 97 | 0x3000, 0x1000, 0x1000, 0x1000, 0x0800, 0x0800, 0x1000, 0x1000, 0x1000, 0x3000, // } 98 | 0x0000, 0x0000, 0x0000, 0x7400, 0x4C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // ~ 99 | }; 100 | 101 | const uint16_t Font11x18 [] = { 102 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // sp 103 | 0x0000, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0000, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, // ! 104 | 0x0000, 0x1B00, 0x1B00, 0x1B00, 0x1B00, 0x1B00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // " 105 | 0x0000, 0x1980, 0x1980, 0x1980, 0x1980, 0x7FC0, 0x7FC0, 0x1980, 0x3300, 0x7FC0, 0x7FC0, 0x3300, 0x3300, 0x3300, 0x3300, 0x0000, 0x0000, 0x0000, // # 106 | 0x0000, 0x1E00, 0x3F00, 0x7580, 0x6580, 0x7400, 0x3C00, 0x1E00, 0x0700, 0x0580, 0x6580, 0x6580, 0x7580, 0x3F00, 0x1E00, 0x0400, 0x0400, 0x0000, // $ 107 | 0x0000, 0x7000, 0xD800, 0xD840, 0xD8C0, 0xD980, 0x7300, 0x0600, 0x0C00, 0x1B80, 0x36C0, 0x66C0, 0x46C0, 0x06C0, 0x0380, 0x0000, 0x0000, 0x0000, // % 108 | 0x0000, 0x1E00, 0x3F00, 0x3300, 0x3300, 0x3300, 0x1E00, 0x0C00, 0x3CC0, 0x66C0, 0x6380, 0x6180, 0x6380, 0x3EC0, 0x1C80, 0x0000, 0x0000, 0x0000, // & 109 | 0x0000, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // ' 110 | 0x0080, 0x0100, 0x0300, 0x0600, 0x0600, 0x0400, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0400, 0x0600, 0x0600, 0x0300, 0x0100, 0x0080, // ( 111 | 0x2000, 0x1000, 0x1800, 0x0C00, 0x0C00, 0x0400, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0400, 0x0C00, 0x0C00, 0x1800, 0x1000, 0x2000, // ) 112 | 0x0000, 0x0C00, 0x2D00, 0x3F00, 0x1E00, 0x3300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // * 113 | 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0xFFC0, 0xFFC0, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // + 114 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0400, 0x0400, 0x0800, // , 115 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E00, 0x1E00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // - 116 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, // . 117 | 0x0000, 0x0300, 0x0300, 0x0300, 0x0600, 0x0600, 0x0600, 0x0600, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x1800, 0x1800, 0x1800, 0x0000, 0x0000, 0x0000, // / 118 | 0x0000, 0x1E00, 0x3F00, 0x3300, 0x6180, 0x6180, 0x6180, 0x6D80, 0x6D80, 0x6180, 0x6180, 0x6180, 0x3300, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // 0 119 | 0x0000, 0x0600, 0x0E00, 0x1E00, 0x3600, 0x2600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0000, 0x0000, 0x0000, // 1 120 | 0x0000, 0x1E00, 0x3F00, 0x7380, 0x6180, 0x6180, 0x0180, 0x0300, 0x0600, 0x0C00, 0x1800, 0x3000, 0x6000, 0x7F80, 0x7F80, 0x0000, 0x0000, 0x0000, // 2 121 | 0x0000, 0x1C00, 0x3E00, 0x6300, 0x6300, 0x0300, 0x0E00, 0x0E00, 0x0300, 0x0180, 0x0180, 0x6180, 0x7380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // 3 122 | 0x0000, 0x0600, 0x0E00, 0x0E00, 0x1E00, 0x1E00, 0x1600, 0x3600, 0x3600, 0x6600, 0x7F80, 0x7F80, 0x0600, 0x0600, 0x0600, 0x0000, 0x0000, 0x0000, // 4 123 | 0x0000, 0x7F00, 0x7F00, 0x6000, 0x6000, 0x6000, 0x6E00, 0x7F00, 0x6380, 0x0180, 0x0180, 0x6180, 0x7380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // 5 124 | 0x0000, 0x1E00, 0x3F00, 0x3380, 0x6180, 0x6000, 0x6E00, 0x7F00, 0x7380, 0x6180, 0x6180, 0x6180, 0x3380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // 6 125 | 0x0000, 0x7F80, 0x7F80, 0x0180, 0x0300, 0x0300, 0x0600, 0x0600, 0x0C00, 0x0C00, 0x0C00, 0x0800, 0x1800, 0x1800, 0x1800, 0x0000, 0x0000, 0x0000, // 7 126 | 0x0000, 0x1E00, 0x3F00, 0x6380, 0x6180, 0x6180, 0x2100, 0x1E00, 0x3F00, 0x6180, 0x6180, 0x6180, 0x6180, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // 8 127 | 0x0000, 0x1E00, 0x3F00, 0x7300, 0x6180, 0x6180, 0x6180, 0x7380, 0x3F80, 0x1D80, 0x0180, 0x6180, 0x7300, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // 9 128 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, // : 129 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0400, 0x0400, 0x0800, // ; 130 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0x0380, 0x0E00, 0x3800, 0x6000, 0x3800, 0x0E00, 0x0380, 0x0080, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // < 131 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7F80, 0x7F80, 0x0000, 0x0000, 0x7F80, 0x7F80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // = 132 | 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0x7000, 0x1C00, 0x0700, 0x0180, 0x0700, 0x1C00, 0x7000, 0x4000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // > 133 | 0x0000, 0x1F00, 0x3F80, 0x71C0, 0x60C0, 0x00C0, 0x01C0, 0x0380, 0x0700, 0x0E00, 0x0C00, 0x0C00, 0x0000, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, // ? 134 | 0x0000, 0x1E00, 0x3F00, 0x3180, 0x7180, 0x6380, 0x6F80, 0x6D80, 0x6D80, 0x6F80, 0x6780, 0x6000, 0x3200, 0x3E00, 0x1C00, 0x0000, 0x0000, 0x0000, // @ 135 | 0x0000, 0x0E00, 0x0E00, 0x1B00, 0x1B00, 0x1B00, 0x1B00, 0x3180, 0x3180, 0x3F80, 0x3F80, 0x3180, 0x60C0, 0x60C0, 0x60C0, 0x0000, 0x0000, 0x0000, // A 136 | 0x0000, 0x7C00, 0x7E00, 0x6300, 0x6300, 0x6300, 0x6300, 0x7E00, 0x7E00, 0x6300, 0x6180, 0x6180, 0x6380, 0x7F00, 0x7E00, 0x0000, 0x0000, 0x0000, // B 137 | 0x0000, 0x1E00, 0x3F00, 0x3180, 0x6180, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6180, 0x3180, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // C 138 | 0x0000, 0x7C00, 0x7F00, 0x6300, 0x6380, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6300, 0x6300, 0x7E00, 0x7C00, 0x0000, 0x0000, 0x0000, // D 139 | 0x0000, 0x7F80, 0x7F80, 0x6000, 0x6000, 0x6000, 0x6000, 0x7F00, 0x7F00, 0x6000, 0x6000, 0x6000, 0x6000, 0x7F80, 0x7F80, 0x0000, 0x0000, 0x0000, // E 140 | 0x0000, 0x7F80, 0x7F80, 0x6000, 0x6000, 0x6000, 0x6000, 0x7F00, 0x7F00, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x0000, 0x0000, 0x0000, // F 141 | 0x0000, 0x1E00, 0x3F00, 0x3180, 0x6180, 0x6000, 0x6000, 0x6000, 0x6380, 0x6380, 0x6180, 0x6180, 0x3180, 0x3F80, 0x1E00, 0x0000, 0x0000, 0x0000, // G 142 | 0x0000, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x7F80, 0x7F80, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x0000, 0x0000, 0x0000, // H 143 | 0x0000, 0x3F00, 0x3F00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x3F00, 0x3F00, 0x0000, 0x0000, 0x0000, // I 144 | 0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x6180, 0x6180, 0x7380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // J 145 | 0x0000, 0x60C0, 0x6180, 0x6300, 0x6600, 0x6600, 0x6C00, 0x7800, 0x7C00, 0x6600, 0x6600, 0x6300, 0x6180, 0x6180, 0x60C0, 0x0000, 0x0000, 0x0000, // K 146 | 0x0000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x7F80, 0x7F80, 0x0000, 0x0000, 0x0000, // L 147 | 0x0000, 0x71C0, 0x71C0, 0x7BC0, 0x7AC0, 0x6AC0, 0x6AC0, 0x6EC0, 0x64C0, 0x60C0, 0x60C0, 0x60C0, 0x60C0, 0x60C0, 0x60C0, 0x0000, 0x0000, 0x0000, // M 148 | 0x0000, 0x7180, 0x7180, 0x7980, 0x7980, 0x7980, 0x6D80, 0x6D80, 0x6D80, 0x6580, 0x6780, 0x6780, 0x6780, 0x6380, 0x6380, 0x0000, 0x0000, 0x0000, // N 149 | 0x0000, 0x1E00, 0x3F00, 0x3300, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x3300, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // O 150 | 0x0000, 0x7E00, 0x7F00, 0x6380, 0x6180, 0x6180, 0x6180, 0x6380, 0x7F00, 0x7E00, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x0000, 0x0000, 0x0000, // P 151 | 0x0000, 0x1E00, 0x3F00, 0x3300, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6580, 0x6780, 0x3300, 0x3F80, 0x1E40, 0x0000, 0x0000, 0x0000, // Q 152 | 0x0000, 0x7E00, 0x7F00, 0x6380, 0x6180, 0x6180, 0x6380, 0x7F00, 0x7E00, 0x6600, 0x6300, 0x6300, 0x6180, 0x6180, 0x60C0, 0x0000, 0x0000, 0x0000, // R 153 | 0x0000, 0x0E00, 0x1F00, 0x3180, 0x3180, 0x3000, 0x3800, 0x1E00, 0x0700, 0x0380, 0x6180, 0x6180, 0x3180, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // S 154 | 0x0000, 0xFFC0, 0xFFC0, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, // T 155 | 0x0000, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // U 156 | 0x0000, 0x60C0, 0x60C0, 0x60C0, 0x3180, 0x3180, 0x3180, 0x1B00, 0x1B00, 0x1B00, 0x1B00, 0x0E00, 0x0E00, 0x0E00, 0x0400, 0x0000, 0x0000, 0x0000, // V 157 | 0x0000, 0xC0C0, 0xC0C0, 0xC0C0, 0xC0C0, 0xC0C0, 0xCCC0, 0x4C80, 0x4C80, 0x5E80, 0x5280, 0x5280, 0x7380, 0x6180, 0x6180, 0x0000, 0x0000, 0x0000, // W 158 | 0x0000, 0xC0C0, 0x6080, 0x6180, 0x3300, 0x3B00, 0x1E00, 0x0C00, 0x0C00, 0x1E00, 0x1F00, 0x3B00, 0x7180, 0x6180, 0xC0C0, 0x0000, 0x0000, 0x0000, // X 159 | 0x0000, 0xC0C0, 0x6180, 0x6180, 0x3300, 0x3300, 0x1E00, 0x1E00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, // Y 160 | 0x0000, 0x3F80, 0x3F80, 0x0180, 0x0300, 0x0300, 0x0600, 0x0C00, 0x0C00, 0x1800, 0x1800, 0x3000, 0x6000, 0x7F80, 0x7F80, 0x0000, 0x0000, 0x0000, // Z 161 | 0x0F00, 0x0F00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0F00, 0x0F00, // [ 162 | 0x0000, 0x1800, 0x1800, 0x1800, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0600, 0x0600, 0x0600, 0x0600, 0x0300, 0x0300, 0x0300, 0x0000, 0x0000, 0x0000, /* \ */ 163 | 0x1E00, 0x1E00, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x1E00, 0x1E00, // ] 164 | 0x0000, 0x0C00, 0x0C00, 0x1E00, 0x1200, 0x3300, 0x3300, 0x6180, 0x6180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // ^ 165 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFE0, 0x0000, // _ 166 | 0x0000, 0x3800, 0x1800, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // ` 167 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1F00, 0x3F80, 0x6180, 0x0180, 0x1F80, 0x3F80, 0x6180, 0x6380, 0x7F80, 0x38C0, 0x0000, 0x0000, 0x0000, // a 168 | 0x0000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6E00, 0x7F00, 0x7380, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x7F00, 0x6E00, 0x0000, 0x0000, 0x0000, // b 169 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E00, 0x3F00, 0x7380, 0x6180, 0x6000, 0x6000, 0x6180, 0x7380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // c 170 | 0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x1D80, 0x3F80, 0x7380, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x3F80, 0x1D80, 0x0000, 0x0000, 0x0000, // d 171 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E00, 0x3F00, 0x7300, 0x6180, 0x7F80, 0x7F80, 0x6000, 0x7180, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // e 172 | 0x0000, 0x07C0, 0x0FC0, 0x0C00, 0x0C00, 0x7F80, 0x7F80, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, // f 173 | 0x0000, 0x0000, 0x0000, 0x0000, 0x1D80, 0x3F80, 0x7380, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x3F80, 0x1D80, 0x0180, 0x6380, 0x7F00, 0x3E00, // g 174 | 0x0000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6F00, 0x7F80, 0x7180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x0000, 0x0000, 0x0000, // h 175 | 0x0000, 0x0600, 0x0600, 0x0000, 0x0000, 0x3E00, 0x3E00, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0000, 0x0000, 0x0000, // i 176 | 0x0600, 0x0600, 0x0000, 0x0000, 0x3E00, 0x3E00, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x4600, 0x7E00, 0x3C00, // j 177 | 0x0000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6180, 0x6300, 0x6600, 0x6C00, 0x7C00, 0x7600, 0x6300, 0x6300, 0x6180, 0x60C0, 0x0000, 0x0000, 0x0000, // k 178 | 0x0000, 0x3E00, 0x3E00, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0000, 0x0000, 0x0000, // l 179 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xDD80, 0xFFC0, 0xCEC0, 0xCCC0, 0xCCC0, 0xCCC0, 0xCCC0, 0xCCC0, 0xCCC0, 0xCCC0, 0x0000, 0x0000, 0x0000, // m 180 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6F00, 0x7F80, 0x7180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x0000, 0x0000, 0x0000, // n 181 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E00, 0x3F00, 0x7380, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // o 182 | 0x0000, 0x0000, 0x0000, 0x0000, 0x6E00, 0x7F00, 0x7380, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x7F00, 0x6E00, 0x6000, 0x6000, 0x6000, 0x6000, // p 183 | 0x0000, 0x0000, 0x0000, 0x0000, 0x1D80, 0x3F80, 0x7380, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x3F80, 0x1D80, 0x0180, 0x0180, 0x0180, 0x0180, // q 184 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6700, 0x3F80, 0x3900, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x0000, 0x0000, 0x0000, // r 185 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E00, 0x3F80, 0x6180, 0x6000, 0x7F00, 0x3F80, 0x0180, 0x6180, 0x7F00, 0x1E00, 0x0000, 0x0000, 0x0000, // s 186 | 0x0000, 0x0000, 0x0800, 0x1800, 0x1800, 0x7F00, 0x7F00, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x1F80, 0x0F80, 0x0000, 0x0000, 0x0000, // t 187 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6380, 0x7F80, 0x3D80, 0x0000, 0x0000, 0x0000, // u 188 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x60C0, 0x3180, 0x3180, 0x3180, 0x1B00, 0x1B00, 0x1B00, 0x0E00, 0x0E00, 0x0600, 0x0000, 0x0000, 0x0000, // v 189 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xDD80, 0xDD80, 0xDD80, 0x5500, 0x5500, 0x5500, 0x7700, 0x7700, 0x2200, 0x2200, 0x0000, 0x0000, 0x0000, // w 190 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6180, 0x3300, 0x3300, 0x1E00, 0x0C00, 0x0C00, 0x1E00, 0x3300, 0x3300, 0x6180, 0x0000, 0x0000, 0x0000, // x 191 | 0x0000, 0x0000, 0x0000, 0x0000, 0x6180, 0x6180, 0x3180, 0x3300, 0x3300, 0x1B00, 0x1B00, 0x1B00, 0x0E00, 0x0E00, 0x0E00, 0x1C00, 0x7C00, 0x7000, // y 192 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7FC0, 0x7FC0, 0x0180, 0x0300, 0x0600, 0x0C00, 0x1800, 0x3000, 0x7FC0, 0x7FC0, 0x0000, 0x0000, 0x0000, // z 193 | 0x0380, 0x0780, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0E00, 0x1C00, 0x1C00, 0x0E00, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0780, 0x0380, // { 194 | 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, // | 195 | 0x3800, 0x3C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0E00, 0x0700, 0x0700, 0x0E00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x3C00, 0x3800, // } 196 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3880, 0x7F80, 0x4700, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // ~ 197 | }; 198 | 199 | const uint16_t Font16x26 [] = { 200 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [ ] 201 | 0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03C0,0x03C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [!] 202 | 0x1E3C,0x1E3C,0x1E3C,0x1E3C,0x1E3C,0x1E3C,0x1E3C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = ["] 203 | 0x01CE,0x03CE,0x03DE,0x039E,0x039C,0x079C,0x3FFF,0x7FFF,0x0738,0x0F38,0x0F78,0x0F78,0x0E78,0xFFFF,0xFFFF,0x1EF0,0x1CF0,0x1CE0,0x3CE0,0x3DE0,0x39E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [#] 204 | 0x03FC,0x0FFE,0x1FEE,0x1EE0,0x1EE0,0x1EE0,0x1EE0,0x1FE0,0x0FE0,0x07E0,0x03F0,0x01FC,0x01FE,0x01FE,0x01FE,0x01FE,0x01FE,0x01FE,0x3DFE,0x3FFC,0x0FF0,0x01E0,0x01E0,0x0000,0x0000,0x0000, // Ascii = [$] 205 | 0x3E03,0xF707,0xE78F,0xE78E,0xE39E,0xE3BC,0xE7B8,0xE7F8,0xF7F0,0x3FE0,0x01C0,0x03FF,0x07FF,0x07F3,0x0FF3,0x1EF3,0x3CF3,0x38F3,0x78F3,0xF07F,0xE03F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [%] 206 | 0x07E0,0x0FF8,0x0F78,0x1F78,0x1F78,0x1F78,0x0F78,0x0FF0,0x0FE0,0x1F80,0x7FC3,0xFBC3,0xF3E7,0xF1F7,0xF0F7,0xF0FF,0xF07F,0xF83E,0x7C7F,0x3FFF,0x1FEF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [&] 207 | 0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03C0,0x01C0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = ['] 208 | 0x003F,0x007C,0x01F0,0x01E0,0x03C0,0x07C0,0x0780,0x0780,0x0F80,0x0F00,0x0F00,0x0F00,0x0F00,0x0F00,0x0F00,0x0F80,0x0780,0x0780,0x07C0,0x03C0,0x01E0,0x01F0,0x007C,0x003F,0x000F,0x0000, // Ascii = [(] 209 | 0x7E00,0x1F00,0x07C0,0x03C0,0x01E0,0x01F0,0x00F0,0x00F0,0x00F8,0x0078,0x0078,0x0078,0x0078,0x0078,0x0078,0x00F8,0x00F0,0x00F0,0x01F0,0x01E0,0x03C0,0x07C0,0x1F00,0x7E00,0x7800,0x0000, // Ascii = [)] 210 | 0x03E0,0x03C0,0x01C0,0x39CE,0x3FFF,0x3F7F,0x0320,0x0370,0x07F8,0x0F78,0x1F3C,0x0638,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [*] 211 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0xFFFF,0xFFFF,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [+] 212 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x03E0,0x01E0,0x01E0,0x01E0,0x01C0,0x0380, // Ascii = [,] 213 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3FFE,0x3FFE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [-] 214 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [.] 215 | 0x000F,0x000F,0x001E,0x001E,0x003C,0x003C,0x0078,0x0078,0x00F0,0x00F0,0x01E0,0x01E0,0x03C0,0x03C0,0x0780,0x0780,0x0F00,0x0F00,0x1E00,0x1E00,0x3C00,0x3C00,0x7800,0x7800,0xF000,0x0000, // Ascii = [/] 216 | 0x07F0,0x0FF8,0x1F7C,0x3E3E,0x3C1E,0x7C1F,0x7C1F,0x780F,0x780F,0x780F,0x780F,0x780F,0x780F,0x780F,0x7C1F,0x7C1F,0x3C1E,0x3E3E,0x1F7C,0x0FF8,0x07F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [0] 217 | 0x00F0,0x07F0,0x3FF0,0x3FF0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x3FFF,0x3FFF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [1] 218 | 0x0FE0,0x3FF8,0x3C7C,0x003C,0x003E,0x003E,0x003E,0x003C,0x003C,0x007C,0x00F8,0x01F0,0x03E0,0x07C0,0x0780,0x0F00,0x1E00,0x3E00,0x3C00,0x3FFE,0x3FFE,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [2] 219 | 0x0FF0,0x1FF8,0x1C7C,0x003E,0x003E,0x003E,0x003C,0x003C,0x00F8,0x0FF0,0x0FF8,0x007C,0x003E,0x001E,0x001E,0x001E,0x001E,0x003E,0x1C7C,0x1FF8,0x1FE0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [3] 220 | 0x0078,0x00F8,0x00F8,0x01F8,0x03F8,0x07F8,0x07F8,0x0F78,0x1E78,0x1E78,0x3C78,0x7878,0x7878,0xFFFF,0xFFFF,0x0078,0x0078,0x0078,0x0078,0x0078,0x0078,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [4] 221 | 0x1FFC,0x1FFC,0x1FFC,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x1FE0,0x1FF8,0x00FC,0x007C,0x003E,0x003E,0x001E,0x003E,0x003E,0x003C,0x1C7C,0x1FF8,0x1FE0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [5] 222 | 0x01FC,0x07FE,0x0F8E,0x1F00,0x1E00,0x3E00,0x3C00,0x3C00,0x3DF8,0x3FFC,0x7F3E,0x7E1F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3E0F,0x1E1F,0x1F3E,0x0FFC,0x03F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [6] 223 | 0x3FFF,0x3FFF,0x3FFF,0x000F,0x001E,0x001E,0x003C,0x0038,0x0078,0x00F0,0x00F0,0x01E0,0x01E0,0x03C0,0x03C0,0x0780,0x0F80,0x0F80,0x0F00,0x1F00,0x1F00,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [7] 224 | 0x07F8,0x0FFC,0x1F3E,0x1E1E,0x3E1E,0x3E1E,0x1E1E,0x1F3C,0x0FF8,0x07F0,0x0FF8,0x1EFC,0x3E3E,0x3C1F,0x7C1F,0x7C0F,0x7C0F,0x3C1F,0x3F3E,0x1FFC,0x07F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [8] 225 | 0x07F0,0x0FF8,0x1E7C,0x3C3E,0x3C1E,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x3C1F,0x3E3F,0x1FFF,0x07EF,0x001F,0x001E,0x001E,0x003E,0x003C,0x38F8,0x3FF0,0x1FE0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [9] 226 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [:] 227 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x03E0,0x01E0,0x01E0,0x01E0,0x03C0,0x0380, // Ascii = [;] 228 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0003,0x000F,0x003F,0x00FC,0x03F0,0x0FC0,0x3F00,0xFE00,0x3F00,0x0FC0,0x03F0,0x00FC,0x003F,0x000F,0x0003,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [<] 229 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xFFFF,0xFFFF,0x0000,0x0000,0x0000,0xFFFF,0xFFFF,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [=] 230 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xE000,0xF800,0x7E00,0x1F80,0x07E0,0x01F8,0x007E,0x001F,0x007E,0x01F8,0x07E0,0x1F80,0x7E00,0xF800,0xE000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [>] 231 | 0x1FF0,0x3FFC,0x383E,0x381F,0x381F,0x001E,0x001E,0x003C,0x0078,0x00F0,0x01E0,0x03C0,0x03C0,0x07C0,0x07C0,0x0000,0x0000,0x0000,0x07C0,0x07C0,0x07C0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [?] 232 | 0x03F8,0x0FFE,0x1F1E,0x3E0F,0x3C7F,0x78FF,0x79EF,0x73C7,0xF3C7,0xF38F,0xF38F,0xF38F,0xF39F,0xF39F,0x73FF,0x7BFF,0x79F7,0x3C00,0x1F1C,0x0FFC,0x03F8,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [@] 233 | 0x0000,0x0000,0x0000,0x03E0,0x03E0,0x07F0,0x07F0,0x07F0,0x0F78,0x0F78,0x0E7C,0x1E3C,0x1E3C,0x3C3E,0x3FFE,0x3FFF,0x781F,0x780F,0xF00F,0xF007,0xF007,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [A] 234 | 0x0000,0x0000,0x0000,0x3FF8,0x3FFC,0x3C3E,0x3C1E,0x3C1E,0x3C1E,0x3C3E,0x3C7C,0x3FF0,0x3FF8,0x3C7E,0x3C1F,0x3C1F,0x3C0F,0x3C0F,0x3C1F,0x3FFE,0x3FF8,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [B] 235 | 0x0000,0x0000,0x0000,0x01FF,0x07FF,0x1F87,0x3E00,0x3C00,0x7C00,0x7800,0x7800,0x7800,0x7800,0x7800,0x7C00,0x7C00,0x3E00,0x3F00,0x1F83,0x07FF,0x01FF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [C] 236 | 0x0000,0x0000,0x0000,0x7FF0,0x7FFC,0x787E,0x781F,0x781F,0x780F,0x780F,0x780F,0x780F,0x780F,0x780F,0x780F,0x780F,0x781F,0x781E,0x787E,0x7FF8,0x7FE0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [D] 237 | 0x0000,0x0000,0x0000,0x3FFF,0x3FFF,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3FFE,0x3FFE,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3FFF,0x3FFF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [E] 238 | 0x0000,0x0000,0x0000,0x1FFF,0x1FFF,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x1FFF,0x1FFF,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [F] 239 | 0x0000,0x0000,0x0000,0x03FE,0x0FFF,0x1F87,0x3E00,0x7C00,0x7C00,0x7800,0xF800,0xF800,0xF87F,0xF87F,0x780F,0x7C0F,0x7C0F,0x3E0F,0x1F8F,0x0FFF,0x03FE,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [G] 240 | 0x0000,0x0000,0x0000,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7FFF,0x7FFF,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [H] 241 | 0x0000,0x0000,0x0000,0x3FFF,0x3FFF,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x3FFF,0x3FFF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [I] 242 | 0x0000,0x0000,0x0000,0x1FFC,0x1FFC,0x007C,0x007C,0x007C,0x007C,0x007C,0x007C,0x007C,0x007C,0x007C,0x007C,0x007C,0x0078,0x0078,0x38F8,0x3FF0,0x3FC0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [J] 243 | 0x0000,0x0000,0x0000,0x3C1F,0x3C1E,0x3C3C,0x3C78,0x3CF0,0x3DE0,0x3FE0,0x3FC0,0x3F80,0x3FC0,0x3FE0,0x3DF0,0x3CF0,0x3C78,0x3C7C,0x3C3E,0x3C1F,0x3C0F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [K] 244 | 0x0000,0x0000,0x0000,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3FFF,0x3FFF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [L] 245 | 0x0000,0x0000,0x0000,0xF81F,0xFC1F,0xFC1F,0xFE3F,0xFE3F,0xFE3F,0xFF7F,0xFF77,0xFF77,0xF7F7,0xF7E7,0xF3E7,0xF3E7,0xF3C7,0xF007,0xF007,0xF007,0xF007,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [M] 246 | 0x0000,0x0000,0x0000,0x7C0F,0x7C0F,0x7E0F,0x7F0F,0x7F0F,0x7F8F,0x7F8F,0x7FCF,0x7BEF,0x79EF,0x79FF,0x78FF,0x78FF,0x787F,0x783F,0x783F,0x781F,0x781F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [N] 247 | 0x0000,0x0000,0x0000,0x07F0,0x1FFC,0x3E3E,0x7C1F,0x780F,0x780F,0xF80F,0xF80F,0xF80F,0xF80F,0xF80F,0xF80F,0x780F,0x780F,0x7C1F,0x3E3E,0x1FFC,0x07F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [O] 248 | 0x0000,0x0000,0x0000,0x3FFC,0x3FFF,0x3E1F,0x3E0F,0x3E0F,0x3E0F,0x3E0F,0x3E1F,0x3E3F,0x3FFC,0x3FF0,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [P] 249 | 0x0000,0x0000,0x0000,0x07F0,0x1FFC,0x3E3E,0x7C1F,0x780F,0x780F,0xF80F,0xF80F,0xF80F,0xF80F,0xF80F,0xF80F,0x780F,0x780F,0x7C1F,0x3E3E,0x1FFC,0x07F8,0x007C,0x003F,0x000F,0x0003,0x0000, // Ascii = [Q] 250 | 0x0000,0x0000,0x0000,0x3FF0,0x3FFC,0x3C7E,0x3C3E,0x3C1E,0x3C1E,0x3C3E,0x3C3C,0x3CFC,0x3FF0,0x3FE0,0x3DF0,0x3CF8,0x3C7C,0x3C3E,0x3C1E,0x3C1F,0x3C0F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [R] 251 | 0x0000,0x0000,0x0000,0x07FC,0x1FFE,0x3E0E,0x3C00,0x3C00,0x3C00,0x3E00,0x1FC0,0x0FF8,0x03FE,0x007F,0x001F,0x000F,0x000F,0x201F,0x3C3E,0x3FFC,0x1FF0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [S] 252 | 0x0000,0x0000,0x0000,0xFFFF,0xFFFF,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [T] 253 | 0x0000,0x0000,0x0000,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x3C1E,0x3C1E,0x3E3E,0x1FFC,0x07F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [U] 254 | 0x0000,0x0000,0x0000,0xF007,0xF007,0xF807,0x780F,0x7C0F,0x3C1E,0x3C1E,0x3E1E,0x1E3C,0x1F3C,0x1F78,0x0F78,0x0FF8,0x07F0,0x07F0,0x07F0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [V] 255 | 0x0000,0x0000,0x0000,0xE003,0xF003,0xF003,0xF007,0xF3E7,0xF3E7,0xF3E7,0x73E7,0x7BF7,0x7FF7,0x7FFF,0x7F7F,0x7F7F,0x7F7E,0x3F7E,0x3E3E,0x3E3E,0x3E3E,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [W] 256 | 0x0000,0x0000,0x0000,0xF807,0x7C0F,0x3E1E,0x3E3E,0x1F3C,0x0FF8,0x07F0,0x07E0,0x03E0,0x03E0,0x07F0,0x0FF8,0x0F7C,0x1E7C,0x3C3E,0x781F,0x780F,0xF00F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [X] 257 | 0x0000,0x0000,0x0000,0xF807,0x7807,0x7C0F,0x3C1E,0x3E1E,0x1F3C,0x0F78,0x0FF8,0x07F0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [Y] 258 | 0x0000,0x0000,0x0000,0x7FFF,0x7FFF,0x000F,0x001F,0x003E,0x007C,0x00F8,0x00F0,0x01E0,0x03E0,0x07C0,0x0F80,0x0F00,0x1E00,0x3E00,0x7C00,0x7FFF,0x7FFF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [Z] 259 | 0x07FF,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x07FF,0x07FF,0x0000, // Ascii = [[] 260 | 0x7800,0x7800,0x3C00,0x3C00,0x1E00,0x1E00,0x0F00,0x0F00,0x0780,0x0780,0x03C0,0x03C0,0x01E0,0x01E0,0x00F0,0x00F0,0x0078,0x0078,0x003C,0x003C,0x001E,0x001E,0x000F,0x000F,0x0007,0x0000, // Ascii = [\] 261 | 0x7FF0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x7FF0,0x7FF0,0x0000, // Ascii = []] 262 | 0x00C0,0x01C0,0x01C0,0x03E0,0x03E0,0x07F0,0x07F0,0x0778,0x0F78,0x0F38,0x1E3C,0x1E3C,0x3C1E,0x3C1E,0x380F,0x780F,0x7807,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [^] 263 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xFFFF,0xFFFF,0x0000,0x0000,0x0000, // Ascii = [_] 264 | 0x00F0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [`] 265 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0FF8,0x3FFC,0x3C7C,0x003E,0x003E,0x003E,0x07FE,0x1FFE,0x3E3E,0x7C3E,0x783E,0x7C3E,0x7C7E,0x3FFF,0x1FCF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [a] 266 | 0x3C00,0x3C00,0x3C00,0x3C00,0x3C00,0x3C00,0x3DF8,0x3FFE,0x3F3E,0x3E1F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3C1F,0x3C1E,0x3F3E,0x3FFC,0x3BF0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [b] 267 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03FE,0x0FFF,0x1F87,0x3E00,0x3E00,0x3C00,0x7C00,0x7C00,0x7C00,0x3C00,0x3E00,0x3E00,0x1F87,0x0FFF,0x03FE,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [c] 268 | 0x001F,0x001F,0x001F,0x001F,0x001F,0x001F,0x07FF,0x1FFF,0x3E3F,0x3C1F,0x7C1F,0x7C1F,0x7C1F,0x781F,0x781F,0x7C1F,0x7C1F,0x3C3F,0x3E7F,0x1FFF,0x0FDF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [d] 269 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03F8,0x0FFC,0x1F3E,0x3E1E,0x3C1F,0x7C1F,0x7FFF,0x7FFF,0x7C00,0x7C00,0x3C00,0x3E00,0x1F07,0x0FFF,0x03FE,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [e] 270 | 0x01FF,0x03E1,0x03C0,0x07C0,0x07C0,0x07C0,0x7FFF,0x7FFF,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [f] 271 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07EF,0x1FFF,0x3E7F,0x3C1F,0x7C1F,0x7C1F,0x781F,0x781F,0x781F,0x7C1F,0x7C1F,0x3C3F,0x3E7F,0x1FFF,0x0FDF,0x001E,0x001E,0x001E,0x387C,0x3FF8, // Ascii = [g] 272 | 0x3C00,0x3C00,0x3C00,0x3C00,0x3C00,0x3C00,0x3DFC,0x3FFE,0x3F9E,0x3F1F,0x3E1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [h] 273 | 0x01F0,0x01F0,0x0000,0x0000,0x0000,0x0000,0x7FE0,0x7FE0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [i] 274 | 0x00F8,0x00F8,0x0000,0x0000,0x0000,0x0000,0x3FF8,0x3FF8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F0,0x71F0,0x7FE0, // Ascii = [j] 275 | 0x3C00,0x3C00,0x3C00,0x3C00,0x3C00,0x3C00,0x3C1F,0x3C3E,0x3C7C,0x3CF8,0x3DF0,0x3DE0,0x3FC0,0x3FC0,0x3FE0,0x3DF0,0x3CF8,0x3C7C,0x3C3E,0x3C1F,0x3C1F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [k] 276 | 0x7FF0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [l] 277 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xF79E,0xFFFF,0xFFFF,0xFFFF,0xFBE7,0xF9E7,0xF1C7,0xF1C7,0xF1C7,0xF1C7,0xF1C7,0xF1C7,0xF1C7,0xF1C7,0xF1C7,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [m] 278 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3DFC,0x3FFE,0x3F9E,0x3F1F,0x3E1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [n] 279 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07F0,0x1FFC,0x3E3E,0x3C1F,0x7C1F,0x780F,0x780F,0x780F,0x780F,0x780F,0x7C1F,0x3C1F,0x3E3E,0x1FFC,0x07F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [o] 280 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3DF8,0x3FFE,0x3F3E,0x3E1F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3C1F,0x3E1E,0x3F3E,0x3FFC,0x3FF8,0x3C00,0x3C00,0x3C00,0x3C00,0x3C00, // Ascii = [p] 281 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07EE,0x1FFE,0x3E7E,0x3C1E,0x7C1E,0x781E,0x781E,0x781E,0x781E,0x781E,0x7C1E,0x7C3E,0x3E7E,0x1FFE,0x0FDE,0x001E,0x001E,0x001E,0x001E,0x001E, // Ascii = [q] 282 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1F7F,0x1FFF,0x1FE7,0x1FC7,0x1F87,0x1F00,0x1F00,0x1F00,0x1F00,0x1F00,0x1F00,0x1F00,0x1F00,0x1F00,0x1F00,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [r] 283 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07FC,0x1FFE,0x1E0E,0x3E00,0x3E00,0x3F00,0x1FE0,0x07FC,0x00FE,0x003E,0x001E,0x001E,0x3C3E,0x3FFC,0x1FF0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [s] 284 | 0x0000,0x0000,0x0000,0x0780,0x0780,0x0780,0x7FFF,0x7FFF,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x07C0,0x03FF,0x01FF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [t] 285 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C3E,0x3C7E,0x3EFE,0x1FFE,0x0FDE,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [u] 286 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xF007,0x780F,0x780F,0x3C1E,0x3C1E,0x3E1E,0x1E3C,0x1E3C,0x0F78,0x0F78,0x0FF0,0x07F0,0x07F0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [v] 287 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xF003,0xF1E3,0xF3E3,0xF3E7,0xF3F7,0xF3F7,0x7FF7,0x7F77,0x7F7F,0x7F7F,0x7F7F,0x3E3E,0x3E3E,0x3E3E,0x3E3E,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [w] 288 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7C0F,0x3E1E,0x3E3C,0x1F3C,0x0FF8,0x07F0,0x07F0,0x03E0,0x07F0,0x07F8,0x0FF8,0x1E7C,0x3E3E,0x3C1F,0x781F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [x] 289 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xF807,0x780F,0x7C0F,0x3C1E,0x3C1E,0x1E3C,0x1E3C,0x1F3C,0x0F78,0x0FF8,0x07F0,0x07F0,0x03E0,0x03E0,0x03C0,0x03C0,0x03C0,0x0780,0x0F80,0x7F00, // Ascii = [y] 290 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3FFF,0x3FFF,0x001F,0x003E,0x007C,0x00F8,0x01F0,0x03E0,0x07C0,0x0F80,0x1F00,0x1E00,0x3C00,0x7FFF,0x7FFF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [z] 291 | 0x01FE,0x03E0,0x03C0,0x03C0,0x03C0,0x03C0,0x01E0,0x01E0,0x01E0,0x01C0,0x03C0,0x3F80,0x3F80,0x03C0,0x01C0,0x01E0,0x01E0,0x01E0,0x03C0,0x03C0,0x03C0,0x03C0,0x03E0,0x01FE,0x007E,0x0000, // Ascii = [{] 292 | 0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x0000, // Ascii = [|] 293 | 0x3FC0,0x03E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01C0,0x03C0,0x03C0,0x01C0,0x01E0,0x00FE,0x00FE,0x01E0,0x01C0,0x03C0,0x03C0,0x01C0,0x01E0,0x01E0,0x01E0,0x01E0,0x03E0,0x3FC0,0x3F00,0x0000, // Ascii = [}] 294 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3F07,0x7FC7,0x73E7,0xF1FF,0xF07E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [~] 295 | }; 296 | 297 | 298 | FontDef_t Font_7x10 = { 299 | 7, 300 | 10, 301 | Font7x10 302 | }; 303 | 304 | FontDef_t Font_11x18 = { 305 | 11, 306 | 18, 307 | Font11x18 308 | }; 309 | 310 | FontDef_t Font_16x26 = { 311 | 16, 312 | 26, 313 | Font16x26 314 | }; 315 | 316 | char* Font_GetStringSize(char* str, FontSize_t* SizeStruct, FontDef_t* Font) { 317 | /* Fill settings */ 318 | SizeStruct->Height = Font->FontHeight; 319 | SizeStruct->Length = Font->FontWidth * strlen(str); 320 | 321 | /* Return pointer */ 322 | return str; 323 | } 324 | -------------------------------------------------------------------------------- /OLED_Ether_demo/main/fonts.h: -------------------------------------------------------------------------------- 1 | #ifndef FONTS_H 2 | #define FONTS_H 3 | 4 | #include "string.h" 5 | #include 6 | #include "esp_system.h" 7 | 8 | typedef struct { 9 | uint8_t FontWidth; /*!< Font width in pixels */ 10 | uint8_t FontHeight; /*!< Font height in pixels */ 11 | const uint16_t *data; /*!< Pointer to data font data array */ 12 | } FontDef_t; 13 | 14 | /** 15 | * @brief String length and height 16 | */ 17 | typedef struct { 18 | uint16_t Length; /*!< String length in units of pixels */ 19 | uint16_t Height; /*!< String height in units of pixels */ 20 | } FontSize_t; 21 | 22 | /** 23 | * @brief 7 x 10 pixels font size structure 24 | */ 25 | extern FontDef_t Font_7x10; 26 | 27 | /** 28 | * @brief 11 x 18 pixels font size structure 29 | */ 30 | extern FontDef_t Font_11x18; 31 | 32 | /** 33 | * @brief 16 x 26 pixels font size structure 34 | */ 35 | extern FontDef_t Font_16x26; 36 | 37 | /** 38 | * @brief Calculates string length and height in units of pixels depending on string and font used 39 | * @param *str: String to be checked for length and height 40 | * @param *SizeStruct: Pointer to empty @ref TM_FONTS_SIZE_t structure where informations will be saved 41 | * @param *Font: Pointer to @ref TM_FontDef_t font used for calculations 42 | * @retval Pointer to string used for length and height 43 | */ 44 | char* Font_GetStringSize(char* str, FontSize_t* SizeStruct, FontDef_t* Font); 45 | 46 | #endif 47 | -------------------------------------------------------------------------------- /OLED_Ether_demo/main/ssd1306.c: -------------------------------------------------------------------------------- 1 | #include "ssd1306.h" 2 | 3 | #define ABS(x) ((x) > 0 ? (x) : -(x)) 4 | 5 | /* SSD1306 data buffer */ 6 | static uint8_t SSD1306_Buffer[SSD1306_WIDTH * SSD1306_HEIGHT / 8]; 7 | 8 | /* Private SSD1306 structure */ 9 | typedef struct { 10 | uint16_t CurrentX; 11 | uint16_t CurrentY; 12 | uint8_t Inverted; 13 | uint8_t Initialized; 14 | } SSD1306_t; 15 | 16 | /* Private variable */ 17 | static SSD1306_t SSD1306; 18 | 19 | uint8_t SSD1306_Init(void) { 20 | /* Init LCD */ 21 | SSD1306_WRITECOMMAND(0xAE); //display off 22 | SSD1306_WRITECOMMAND(0x20); //Set Memory Addressing Mode 23 | SSD1306_WRITECOMMAND(0x10); //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid 24 | SSD1306_WRITECOMMAND(0xB0); //Set Page Start Address for Page Addressing Mode,0-7 25 | SSD1306_WRITECOMMAND(0xC8); //Set COM Output Scan DirectionSSD1306_WRITECOMMAND(command) 26 | SSD1306_WRITECOMMAND(0x00); //---set low column address 27 | SSD1306_WRITECOMMAND(0x10); //---set high column address 28 | SSD1306_WRITECOMMAND(0x40); //--set start line address 29 | SSD1306_WRITECOMMAND(0x81); //--set contrast control register 30 | SSD1306_WRITECOMMAND(0xFF); 31 | SSD1306_WRITECOMMAND(0xA1); //--set segment re-map 0 to 127 32 | SSD1306_WRITECOMMAND(0xA6); //--set normal display 33 | SSD1306_WRITECOMMAND(0xA8); //--set multiplex ratio(1 to 64) 34 | SSD1306_WRITECOMMAND(0x3F); // 35 | SSD1306_WRITECOMMAND(0xA4); //0xa4,Output follows RAM content;0xa5,Output ignores RAM content 36 | SSD1306_WRITECOMMAND(0xD3); //-set display offset 37 | SSD1306_WRITECOMMAND(0x00); //-not offset 38 | SSD1306_WRITECOMMAND(0xD5); //--set display clock divide ratio/oscillator frequency 39 | SSD1306_WRITECOMMAND(0xF0); //--set divide ratio 40 | SSD1306_WRITECOMMAND(0xD9); //--set pre-charge period 41 | SSD1306_WRITECOMMAND(0x22); // 42 | SSD1306_WRITECOMMAND(0xDA); //--set com pins hardware configuration 43 | SSD1306_WRITECOMMAND(0x12); 44 | SSD1306_WRITECOMMAND(0xDB); //--set vcomh 45 | SSD1306_WRITECOMMAND(0x20); //0x20,0.77xVcc 46 | SSD1306_WRITECOMMAND(0x8D); //--set DC-DC enable 47 | SSD1306_WRITECOMMAND(0x14); // 48 | SSD1306_WRITECOMMAND(0xAF); //--turn on SSD1306 panel 49 | 50 | /* Clear screen */ 51 | SSD1306_Fill(SSD1306_COLOR_BLACK); 52 | 53 | /* Update screen */ 54 | SSD1306_UpdateScreen(); 55 | 56 | /* Set default values */ 57 | SSD1306.CurrentX = 0; 58 | SSD1306.CurrentY = 0; 59 | 60 | /* Initialized OK */ 61 | SSD1306.Initialized = 1; 62 | 63 | /* Return OK */ 64 | return 1; 65 | } 66 | 67 | void SSD1306_UpdateScreen(void) { 68 | uint8_t m; 69 | int ret; 70 | for (m = 0; m < 8; m++) { 71 | SSD1306_WRITECOMMAND(0xB0 + m); 72 | SSD1306_WRITECOMMAND(0x00); 73 | SSD1306_WRITECOMMAND(0x10); 74 | 75 | // Write multi data 76 | ret = X_WriteMulti(I2C_NUM_1,0x3C,0x40,SSD1306_WIDTH, &SSD1306_Buffer[SSD1306_WIDTH * m]); 77 | if (ret == ESP_FAIL) { 78 | printf("I2C Fail\n"); 79 | } 80 | 81 | } 82 | } 83 | 84 | void SSD1306_ToggleInvert(void) { 85 | uint16_t i; 86 | 87 | /* Toggle invert */ 88 | SSD1306.Inverted = !SSD1306.Inverted; 89 | 90 | /* Do memory toggle */ 91 | for (i = 0; i < sizeof(SSD1306_Buffer); i++) { 92 | SSD1306_Buffer[i] = ~SSD1306_Buffer[i]; 93 | } 94 | } 95 | 96 | void SSD1306_Fill(SSD1306_COLOR_t color) { 97 | /* Set memory */ 98 | memset(SSD1306_Buffer, (color == SSD1306_COLOR_BLACK) ? 0x00 : 0xFF, sizeof(SSD1306_Buffer)); 99 | } 100 | 101 | void SSD1306_DrawPixel(uint16_t x, uint16_t y, SSD1306_COLOR_t color) { 102 | if ( 103 | x >= SSD1306_WIDTH || 104 | y >= SSD1306_HEIGHT 105 | ) { 106 | /* Error */ 107 | return; 108 | } 109 | 110 | /* Check if pixels are inverted */ 111 | if (SSD1306.Inverted) { 112 | color = (SSD1306_COLOR_t)!color; 113 | } 114 | 115 | /* Set color */ 116 | if (color == SSD1306_COLOR_WHITE) { 117 | SSD1306_Buffer[x + (y / 8) * SSD1306_WIDTH] |= 1 << (y % 8); 118 | } else { 119 | SSD1306_Buffer[x + (y / 8) * SSD1306_WIDTH] &= ~(1 << (y % 8)); 120 | } 121 | } 122 | 123 | void SSD1306_GotoXY(uint16_t x, uint16_t y) { 124 | /* Set write pointers */ 125 | SSD1306.CurrentX = x; 126 | SSD1306.CurrentY = y; 127 | } 128 | 129 | char SSD1306_Putc(char ch, FontDef_t* Font, SSD1306_COLOR_t color) { 130 | uint32_t i, b, j; 131 | 132 | /* Check available space in LCD */ 133 | if ( 134 | SSD1306_WIDTH <= (SSD1306.CurrentX + Font->FontWidth) || 135 | SSD1306_HEIGHT <= (SSD1306.CurrentY + Font->FontHeight) 136 | ) { 137 | /* Error */ 138 | return 0; 139 | } 140 | 141 | /* Go through font */ 142 | for (i = 0; i < Font->FontHeight; i++) { 143 | b = Font->data[(ch - 32) * Font->FontHeight + i]; 144 | for (j = 0; j < Font->FontWidth; j++) { 145 | if ((b << j) & 0x8000) { 146 | SSD1306_DrawPixel(SSD1306.CurrentX + j, (SSD1306.CurrentY + i), (SSD1306_COLOR_t) color); 147 | } else { 148 | SSD1306_DrawPixel(SSD1306.CurrentX + j, (SSD1306.CurrentY + i), (SSD1306_COLOR_t)!color); 149 | } 150 | } 151 | } 152 | 153 | /* Increase pointer */ 154 | SSD1306.CurrentX += Font->FontWidth; 155 | 156 | /* Return character written */ 157 | return ch; 158 | } 159 | 160 | char SSD1306_Puts(char* str, FontDef_t* Font, SSD1306_COLOR_t color) { 161 | /* Write characters */ 162 | while (*str) { 163 | /* Write character by character */ 164 | if (SSD1306_Putc(*str, Font, color) != *str) { 165 | /* Return error */ 166 | return *str; 167 | } 168 | 169 | /* Increase string pointer */ 170 | str++; 171 | } 172 | 173 | /* Everything OK, zero should be returned */ 174 | return *str; 175 | } 176 | 177 | 178 | void SSD1306_DrawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, SSD1306_COLOR_t c) { 179 | int16_t dx, dy, sx, sy, err, e2, i, tmp; 180 | 181 | /* Check for overflow */ 182 | if (x0 >= SSD1306_WIDTH) { 183 | x0 = SSD1306_WIDTH - 1; 184 | } 185 | if (x1 >= SSD1306_WIDTH) { 186 | x1 = SSD1306_WIDTH - 1; 187 | } 188 | if (y0 >= SSD1306_HEIGHT) { 189 | y0 = SSD1306_HEIGHT - 1; 190 | } 191 | if (y1 >= SSD1306_HEIGHT) { 192 | y1 = SSD1306_HEIGHT - 1; 193 | } 194 | 195 | dx = (x0 < x1) ? (x1 - x0) : (x0 - x1); 196 | dy = (y0 < y1) ? (y1 - y0) : (y0 - y1); 197 | sx = (x0 < x1) ? 1 : -1; 198 | sy = (y0 < y1) ? 1 : -1; 199 | err = ((dx > dy) ? dx : -dy) / 2; 200 | 201 | if (dx == 0) { 202 | if (y1 < y0) { 203 | tmp = y1; 204 | y1 = y0; 205 | y0 = tmp; 206 | } 207 | 208 | if (x1 < x0) { 209 | tmp = x1; 210 | x1 = x0; 211 | x0 = tmp; 212 | } 213 | 214 | /* Vertical line */ 215 | for (i = y0; i <= y1; i++) { 216 | SSD1306_DrawPixel(x0, i, c); 217 | } 218 | 219 | /* Return from function */ 220 | return; 221 | } 222 | 223 | if (dy == 0) { 224 | if (y1 < y0) { 225 | tmp = y1; 226 | y1 = y0; 227 | y0 = tmp; 228 | } 229 | 230 | if (x1 < x0) { 231 | tmp = x1; 232 | x1 = x0; 233 | x0 = tmp; 234 | } 235 | 236 | /* Horizontal line */ 237 | for (i = x0; i <= x1; i++) { 238 | SSD1306_DrawPixel(i, y0, c); 239 | } 240 | 241 | /* Return from function */ 242 | return; 243 | } 244 | 245 | while (1) { 246 | SSD1306_DrawPixel(x0, y0, c); 247 | if (x0 == x1 && y0 == y1) { 248 | break; 249 | } 250 | e2 = err; 251 | if (e2 > -dx) { 252 | err -= dy; 253 | x0 += sx; 254 | } 255 | if (e2 < dy) { 256 | err += dx; 257 | y0 += sy; 258 | } 259 | } 260 | } 261 | 262 | void SSD1306_DrawRectangle(uint16_t x, uint16_t y, uint16_t w, uint16_t h, SSD1306_COLOR_t c) { 263 | /* Check input parameters */ 264 | if ( 265 | x >= SSD1306_WIDTH || 266 | y >= SSD1306_HEIGHT 267 | ) { 268 | /* Return error */ 269 | return; 270 | } 271 | 272 | /* Check width and height */ 273 | if ((x + w) >= SSD1306_WIDTH) { 274 | w = SSD1306_WIDTH - x; 275 | } 276 | if ((y + h) >= SSD1306_HEIGHT) { 277 | h = SSD1306_HEIGHT - y; 278 | } 279 | 280 | /* Draw 4 lines */ 281 | SSD1306_DrawLine(x, y, x + w, y, c); /* Top line */ 282 | SSD1306_DrawLine(x, y + h, x + w, y + h, c); /* Bottom line */ 283 | SSD1306_DrawLine(x, y, x, y + h, c); /* Left line */ 284 | SSD1306_DrawLine(x + w, y, x + w, y + h, c); /* Right line */ 285 | } 286 | 287 | void SSD1306_DrawFilledRectangle(uint16_t x, uint16_t y, uint16_t w, uint16_t h, SSD1306_COLOR_t c) { 288 | uint8_t i; 289 | 290 | /* Check input parameters */ 291 | if ( 292 | x >= SSD1306_WIDTH || 293 | y >= SSD1306_HEIGHT 294 | ) { 295 | /* Return error */ 296 | return; 297 | } 298 | 299 | /* Check width and height */ 300 | if ((x + w) >= SSD1306_WIDTH) { 301 | w = SSD1306_WIDTH - x; 302 | } 303 | if ((y + h) >= SSD1306_HEIGHT) { 304 | h = SSD1306_HEIGHT - y; 305 | } 306 | 307 | /* Draw lines */ 308 | for (i = 0; i <= h; i++) { 309 | /* Draw lines */ 310 | SSD1306_DrawLine(x, y + i, x + w, y + i, c); 311 | } 312 | } 313 | 314 | void SSD1306_DrawTriangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t x3, uint16_t y3, SSD1306_COLOR_t color) { 315 | /* Draw lines */ 316 | SSD1306_DrawLine(x1, y1, x2, y2, color); 317 | SSD1306_DrawLine(x2, y2, x3, y3, color); 318 | SSD1306_DrawLine(x3, y3, x1, y1, color); 319 | } 320 | 321 | 322 | void SSD1306_DrawFilledTriangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t x3, uint16_t y3, SSD1306_COLOR_t color) { 323 | int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0, 324 | yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0, 325 | curpixel = 0; 326 | 327 | deltax = ABS(x2 - x1); 328 | deltay = ABS(y2 - y1); 329 | x = x1; 330 | y = y1; 331 | 332 | if (x2 >= x1) { 333 | xinc1 = 1; 334 | xinc2 = 1; 335 | } else { 336 | xinc1 = -1; 337 | xinc2 = -1; 338 | } 339 | 340 | if (y2 >= y1) { 341 | yinc1 = 1; 342 | yinc2 = 1; 343 | } else { 344 | yinc1 = -1; 345 | yinc2 = -1; 346 | } 347 | 348 | if (deltax >= deltay){ 349 | xinc1 = 0; 350 | yinc2 = 0; 351 | den = deltax; 352 | num = deltax / 2; 353 | numadd = deltay; 354 | numpixels = deltax; 355 | } else { 356 | xinc2 = 0; 357 | yinc1 = 0; 358 | den = deltay; 359 | num = deltay / 2; 360 | numadd = deltax; 361 | numpixels = deltay; 362 | } 363 | 364 | for (curpixel = 0; curpixel <= numpixels; curpixel++) { 365 | SSD1306_DrawLine(x, y, x3, y3, color); 366 | 367 | num += numadd; 368 | if (num >= den) { 369 | num -= den; 370 | x += xinc1; 371 | y += yinc1; 372 | } 373 | x += xinc2; 374 | y += yinc2; 375 | } 376 | } 377 | 378 | void SSD1306_DrawCircle(int16_t x0, int16_t y0, int16_t r, SSD1306_COLOR_t c) { 379 | int16_t f = 1 - r; 380 | int16_t ddF_x = 1; 381 | int16_t ddF_y = -2 * r; 382 | int16_t x = 0; 383 | int16_t y = r; 384 | 385 | SSD1306_DrawPixel(x0, y0 + r, c); 386 | SSD1306_DrawPixel(x0, y0 - r, c); 387 | SSD1306_DrawPixel(x0 + r, y0, c); 388 | SSD1306_DrawPixel(x0 - r, y0, c); 389 | 390 | while (x < y) { 391 | if (f >= 0) { 392 | y--; 393 | ddF_y += 2; 394 | f += ddF_y; 395 | } 396 | x++; 397 | ddF_x += 2; 398 | f += ddF_x; 399 | 400 | SSD1306_DrawPixel(x0 + x, y0 + y, c); 401 | SSD1306_DrawPixel(x0 - x, y0 + y, c); 402 | SSD1306_DrawPixel(x0 + x, y0 - y, c); 403 | SSD1306_DrawPixel(x0 - x, y0 - y, c); 404 | 405 | SSD1306_DrawPixel(x0 + y, y0 + x, c); 406 | SSD1306_DrawPixel(x0 - y, y0 + x, c); 407 | SSD1306_DrawPixel(x0 + y, y0 - x, c); 408 | SSD1306_DrawPixel(x0 - y, y0 - x, c); 409 | } 410 | } 411 | 412 | void SSD1306_DrawFilledCircle(int16_t x0, int16_t y0, int16_t r, SSD1306_COLOR_t c) { 413 | int16_t f = 1 - r; 414 | int16_t ddF_x = 1; 415 | int16_t ddF_y = -2 * r; 416 | int16_t x = 0; 417 | int16_t y = r; 418 | 419 | SSD1306_DrawPixel(x0, y0 + r, c); 420 | SSD1306_DrawPixel(x0, y0 - r, c); 421 | SSD1306_DrawPixel(x0 + r, y0, c); 422 | SSD1306_DrawPixel(x0 - r, y0, c); 423 | SSD1306_DrawLine(x0 - r, y0, x0 + r, y0, c); 424 | 425 | while (x < y) { 426 | if (f >= 0) { 427 | y--; 428 | ddF_y += 2; 429 | f += ddF_y; 430 | } 431 | x++; 432 | ddF_x += 2; 433 | f += ddF_x; 434 | 435 | SSD1306_DrawLine(x0 - x, y0 + y, x0 + x, y0 + y, c); 436 | SSD1306_DrawLine(x0 + x, y0 - y, x0 - x, y0 - y, c); 437 | 438 | SSD1306_DrawLine(x0 + y, y0 + x, x0 - y, y0 + x, c); 439 | SSD1306_DrawLine(x0 + y, y0 - x, x0 - y, y0 - x, c); 440 | } 441 | } 442 | 443 | void SSD1306_ON(void) { 444 | SSD1306_WRITECOMMAND(0x8D); 445 | SSD1306_WRITECOMMAND(0x14); 446 | SSD1306_WRITECOMMAND(0xAF); 447 | } 448 | void SSD1306_OFF(void) { 449 | SSD1306_WRITECOMMAND(0x8D); 450 | SSD1306_WRITECOMMAND(0x10); 451 | SSD1306_WRITECOMMAND(0xAE); 452 | } 453 | 454 | void SSD1306_WRITECOMMAND(uint8_t command) 455 | { 456 | int ret; 457 | ret = X_WrByte(I2C_NUM_1,0x3C,0x00,command); 458 | if (ret == ESP_FAIL) { 459 | printf("I2C Fail\n"); 460 | } 461 | 462 | } 463 | -------------------------------------------------------------------------------- /OLED_Ether_demo/main/ssd1306.h: -------------------------------------------------------------------------------- 1 | #ifndef SSD1306_H 2 | #define SSD1306_H 3 | 4 | #include "driver/i2c.h" 5 | #include "xi2c.h" 6 | #include "fonts.h" 7 | #include "stdlib.h" 8 | #include "string.h" 9 | #include "esp_system.h" 10 | 11 | /* I2C address */ 12 | #ifndef SSD1306_I2C_ADDR 13 | #define SSD1306_I2C_ADDR 0x3C//0x78 14 | /* Use defines.h for custom definitions */ 15 | //#define SSD1306_I2C_ADDR 0x7A 16 | #endif 17 | 18 | /* SSD1306 settings */ 19 | /* SSD1306 width in pixels */ 20 | #ifndef SSD1306_WIDTH 21 | #define SSD1306_WIDTH 132 22 | #endif 23 | /* SSD1306 LCD height in pixels */ 24 | #ifndef SSD1306_HEIGHT 25 | #define SSD1306_HEIGHT 64 26 | #endif 27 | 28 | /** 29 | * @brief SSD1306 color enumeration 30 | */ 31 | 32 | typedef enum { 33 | SSD1306_COLOR_BLACK = 0x00, /*!< Black color, no pixel */ 34 | SSD1306_COLOR_WHITE = 0x01 /*!< Pixel is set. Color depends on LCD */ 35 | } SSD1306_COLOR_t; 36 | 37 | /** 38 | * @brief Initializes SSD1306 39 | * @param None 40 | * @retval Initialization status: 41 | * - 0: SSD1306 was not detected on I2C port 42 | * - >0: SSD1306 initialized OK and ready to use 43 | */ 44 | uint8_t SSD1306_Init(void); 45 | 46 | /** 47 | * @brief Updates buffer from internal RAM to LCD 48 | * @note This function must be called each time you do some changes to LCD, to update buffer from RAM to LCD 49 | * @param None 50 | * @retval None 51 | */ 52 | void SSD1306_UpdateScreen(void); 53 | 54 | /** 55 | * @brief Toggles pixels invertion inside internal RAM 56 | * @note @ref SSD1306_UpdateScreen() must be called after that in order to see updated LCD screen 57 | * @param None 58 | * @retval None 59 | */ 60 | void SSD1306_ToggleInvert(void); 61 | 62 | /** 63 | * @brief Fills entire LCD with desired color 64 | * @note @ref SSD1306_UpdateScreen() must be called after that in order to see updated LCD screen 65 | * @param Color: Color to be used for screen fill. This parameter can be a value of @ref SSD1306_COLOR_t enumeration 66 | * @retval None 67 | */ 68 | void SSD1306_Fill(SSD1306_COLOR_t Color); 69 | 70 | /** 71 | * @brief Draws pixel at desired location 72 | * @note @ref SSD1306_UpdateScreen() must be called after that in order to see updated LCD screen 73 | * @param x: X location. This parameter can be a value between 0 and SSD1306_WIDTH - 1 74 | * @param y: Y location. This parameter can be a value between 0 and SSD1306_HEIGHT - 1 75 | * @param color: Color to be used for screen fill. This parameter can be a value of @ref SSD1306_COLOR_t enumeration 76 | * @retval None 77 | */ 78 | void SSD1306_DrawPixel(uint16_t x, uint16_t y, SSD1306_COLOR_t color); 79 | 80 | /** 81 | * @brief Sets cursor pointer to desired location for strings 82 | * @param x: X location. This parameter can be a value between 0 and SSD1306_WIDTH - 1 83 | * @param y: Y location. This parameter can be a value between 0 and SSD1306_HEIGHT - 1 84 | * @retval None 85 | */ 86 | void SSD1306_GotoXY(uint16_t x, uint16_t y); 87 | 88 | /** 89 | * @brief Puts character to internal RAM 90 | * @note @ref SSD1306_UpdateScreen() must be called after that in order to see updated LCD screen 91 | * @param ch: Character to be written 92 | * @param *Font: Pointer to @ref FontDef_t structure with used font 93 | * @param color: Color used for drawing. This parameter can be a value of @ref SSD1306_COLOR_t enumeration 94 | * @retval Character written 95 | */ 96 | char SSD1306_Putc(char ch, FontDef_t* Font, SSD1306_COLOR_t color); 97 | 98 | /** 99 | * @brief Puts string to internal RAM 100 | * @note @ref SSD1306_UpdateScreen() must be called after that in order to see updated LCD screen 101 | * @param *str: String to be written 102 | * @param *Font: Pointer to @ref FontDef_t structure with used font 103 | * @param color: Color used for drawing. This parameter can be a value of @ref SSD1306_COLOR_t enumeration 104 | * @retval Zero on success or character value when function failed 105 | */ 106 | char SSD1306_Puts(char* str, FontDef_t* Font, SSD1306_COLOR_t color); 107 | 108 | /** 109 | * @brief Draws line on LCD 110 | * @note @ref SSD1306_UpdateScreen() must be called after that in order to see updated LCD screen 111 | * @param x0: Line X start point. Valid input is 0 to SSD1306_WIDTH - 1 112 | * @param y0: Line Y start point. Valid input is 0 to SSD1306_HEIGHT - 1 113 | * @param x1: Line X end point. Valid input is 0 to SSD1306_WIDTH - 1 114 | * @param y1: Line Y end point. Valid input is 0 to SSD1306_HEIGHT - 1 115 | * @param c: Color to be used. This parameter can be a value of @ref SSD1306_COLOR_t enumeration 116 | * @retval None 117 | */ 118 | void SSD1306_DrawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, SSD1306_COLOR_t c); 119 | 120 | /** 121 | * @brief Draws rectangle on LCD 122 | * @note @ref SSD1306_UpdateScreen() must be called after that in order to see updated LCD screen 123 | * @param x: Top left X start point. Valid input is 0 to SSD1306_WIDTH - 1 124 | * @param y: Top left Y start point. Valid input is 0 to SSD1306_HEIGHT - 1 125 | * @param w: Rectangle width in units of pixels 126 | * @param h: Rectangle height in units of pixels 127 | * @param c: Color to be used. This parameter can be a value of @ref SSD1306_COLOR_t enumeration 128 | * @retval None 129 | */ 130 | void SSD1306_DrawRectangle(uint16_t x, uint16_t y, uint16_t w, uint16_t h, SSD1306_COLOR_t c); 131 | 132 | /** 133 | * @brief Draws filled rectangle on LCD 134 | * @note @ref SSD1306_UpdateScreen() must be called after that in order to see updated LCD screen 135 | * @param x: Top left X start point. Valid input is 0 to SSD1306_WIDTH - 1 136 | * @param y: Top left Y start point. Valid input is 0 to SSD1306_HEIGHT - 1 137 | * @param w: Rectangle width in units of pixels 138 | * @param h: Rectangle height in units of pixels 139 | * @param c: Color to be used. This parameter can be a value of @ref SSD1306_COLOR_t enumeration 140 | * @retval None 141 | */ 142 | void SSD1306_DrawFilledRectangle(uint16_t x, uint16_t y, uint16_t w, uint16_t h, SSD1306_COLOR_t c); 143 | 144 | /** 145 | * @brief Draws triangle on LCD 146 | * @note @ref SSD1306_UpdateScreen() must be called after that in order to see updated LCD screen 147 | * @param x1: First coordinate X location. Valid input is 0 to SSD1306_WIDTH - 1 148 | * @param y1: First coordinate Y location. Valid input is 0 to SSD1306_HEIGHT - 1 149 | * @param x2: Second coordinate X location. Valid input is 0 to SSD1306_WIDTH - 1 150 | * @param y2: Second coordinate Y location. Valid input is 0 to SSD1306_HEIGHT - 1 151 | * @param x3: Third coordinate X location. Valid input is 0 to SSD1306_WIDTH - 1 152 | * @param y3: Third coordinate Y location. Valid input is 0 to SSD1306_HEIGHT - 1 153 | * @param c: Color to be used. This parameter can be a value of @ref SSD1306_COLOR_t enumeration 154 | * @retval None 155 | */ 156 | void SSD1306_DrawTriangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t x3, uint16_t y3, SSD1306_COLOR_t color); 157 | 158 | /** 159 | * @brief Draws circle to STM buffer 160 | * @note @ref SSD1306_UpdateScreen() must be called after that in order to see updated LCD screen 161 | * @param x: X location for center of circle. Valid input is 0 to SSD1306_WIDTH - 1 162 | * @param y: Y location for center of circle. Valid input is 0 to SSD1306_HEIGHT - 1 163 | * @param r: Circle radius in units of pixels 164 | * @param c: Color to be used. This parameter can be a value of @ref SSD1306_COLOR_t enumeration 165 | * @retval None 166 | */ 167 | void SSD1306_DrawCircle(int16_t x0, int16_t y0, int16_t r, SSD1306_COLOR_t c); 168 | 169 | /** 170 | * @brief Draws filled circle to STM buffer 171 | * @note @ref SSD1306_UpdateScreen() must be called after that in order to see updated LCD screen 172 | * @param x: X location for center of circle. Valid input is 0 to SSD1306_WIDTH - 1 173 | * @param y: Y location for center of circle. Valid input is 0 to SSD1306_HEIGHT - 1 174 | * @param r: Circle radius in units of pixels 175 | * @param c: Color to be used. This parameter can be a value of @ref SSD1306_COLOR_t enumeration 176 | * @retval None 177 | */ 178 | void SSD1306_DrawFilledCircle(int16_t x0, int16_t y0, int16_t r, SSD1306_COLOR_t c); 179 | 180 | void SSD1306_WRITECOMMAND(uint8_t command); 181 | 182 | #endif 183 | -------------------------------------------------------------------------------- /OLED_Ether_demo/main/xi2c.c: -------------------------------------------------------------------------------- 1 | #include "xi2c.h" 2 | 3 | 4 | static esp_err_t XI2CWrite(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t* data_wr, size_t size); 5 | static esp_err_t XI2CRead(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t* data_rd, size_t size); 6 | 7 | static esp_err_t XI2CWrite(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t* data_wr, size_t size) { 8 | 9 | i2c_cmd_handle_t cmd = i2c_cmd_link_create(); 10 | i2c_master_start(cmd); 11 | i2c_master_write_byte(cmd, ( i2c_add << 1 ), ACK_CHECK_DIS); 12 | i2c_master_write(cmd, data_wr, size, ACK_CHECK_DIS); 13 | i2c_master_stop(cmd); 14 | esp_err_t ret = i2c_master_cmd_begin(i2c_num, cmd, 1000 / portTICK_RATE_MS); 15 | i2c_cmd_link_delete(cmd); 16 | return ret; 17 | } 18 | 19 | static esp_err_t XI2CRead(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t* data_rd, size_t size) { 20 | if (size == 0) { 21 | return ESP_OK; 22 | } 23 | i2c_cmd_handle_t cmd = i2c_cmd_link_create(); 24 | i2c_master_start(cmd); 25 | i2c_master_write_byte(cmd, ( i2c_add << 1 ), ACK_CHECK_DIS); 26 | if (size > 1) { 27 | i2c_master_read(cmd, data_rd, size, ACK_VAL); 28 | } 29 | i2c_master_read_byte(cmd, data_rd + size, ACK_VAL); 30 | i2c_master_stop(cmd); 31 | esp_err_t ret = i2c_master_cmd_begin(i2c_num, cmd, 1000 / portTICK_RATE_MS); 32 | i2c_cmd_link_delete(cmd); 33 | return ret; 34 | } 35 | 36 | esp_err_t X_WriteMulti(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t index, uint32_t count, uint8_t* data_wr) { 37 | if (count > sizeof(XI2CBuffer) - 1) { 38 | return ESP_FAIL; 39 | } 40 | XI2CBuffer[0] = index; 41 | memcpy(&XI2CBuffer[1], data_wr, count); 42 | esp_err_t ret = XI2CWrite(i2c_num, i2c_add, XI2CBuffer, count+1); 43 | return ret; 44 | } 45 | 46 | esp_err_t X_ReadMulti(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t index, uint32_t count, uint8_t* data_rd) { 47 | esp_err_t ret; 48 | 49 | ret = XI2CWrite(i2c_num, i2c_add, &index, 0x1); 50 | if (ret == ESP_FAIL) { 51 | return ret; 52 | } 53 | 54 | ret = XI2CRead(i2c_num, i2c_add, data_rd, count); 55 | return ret; 56 | } 57 | 58 | esp_err_t X_WrByte(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t index, uint8_t data_wr) { 59 | 60 | XI2CBuffer[0] = index; 61 | XI2CBuffer[1] = data_wr; 62 | esp_err_t ret = XI2CWrite(i2c_num, i2c_add, XI2CBuffer, 0x2); 63 | return ret; 64 | 65 | } 66 | 67 | esp_err_t X_RdByte(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t index, uint8_t *data_rd) { 68 | 69 | esp_err_t ret; 70 | 71 | ret = XI2CWrite(i2c_num, i2c_add, &index, 0x1); 72 | if (ret == ESP_FAIL) { 73 | return ret; 74 | } 75 | 76 | ret = XI2CRead(i2c_num, i2c_add, data_rd, 0x1); 77 | return ret; 78 | } 79 | 80 | esp_err_t X_WrBit(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t index, uint8_t bitNum, uint8_t data_wr) { 81 | 82 | uint8_t b; 83 | esp_err_t ret; 84 | ret = X_RdByte(i2c_num, i2c_add, index, &b); 85 | if (ret == ESP_FAIL) { 86 | return ret; 87 | } 88 | b = (data_wr != 0) ? (b | (1 << bitNum)) : (b & ~(1 << bitNum)); 89 | ret = X_WrByte(i2c_num, i2c_add, index, b); 90 | return ret; 91 | 92 | } 93 | 94 | esp_err_t X_WrBits(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t index, uint8_t bitStart, uint8_t length, uint8_t data_wr) { 95 | 96 | uint8_t b; 97 | // 010 value to write 98 | // 76543210 bit numbers 99 | // args: bitStart=4, length=3 100 | // 00011100 mask byte 101 | // 10101111 original value (sample) 102 | // 10100011 original & ~mask 103 | // 10101011 masked | value 104 | esp_err_t ret; 105 | ret = X_RdByte(i2c_num, i2c_add, index, &b); 106 | if (ret == ESP_FAIL) { 107 | return ret; 108 | } 109 | uint8_t mask = ((1 << length) - 1) << (bitStart - length + 1); 110 | data_wr <<= (bitStart - length + 1); // shift data into correct position 111 | data_wr &= mask; // zero all non-important bits in data 112 | b &= ~(mask); // zero all important bits in existing byte 113 | b |= data_wr; // combine data with existing byte 114 | ret = X_WrByte(i2c_num, i2c_add, index, b); 115 | return ret; 116 | 117 | } 118 | 119 | esp_err_t X_WrWord(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t index, uint8_t data_wr) { 120 | 121 | XI2CBuffer[0] = index; 122 | XI2CBuffer[1] = data_wr >> 8; 123 | XI2CBuffer[2] = data_wr & 0x00FF; 124 | esp_err_t ret = XI2CWrite(i2c_num, i2c_add, XI2CBuffer, 0x3); 125 | return ret; 126 | 127 | } 128 | 129 | esp_err_t X_WrDWord(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t index, uint8_t data_wr) { 130 | 131 | XI2CBuffer[0] = index; 132 | XI2CBuffer[1] = (data_wr >> 24) & 0xFF; 133 | XI2CBuffer[2] = (data_wr >> 16) & 0xFF; 134 | XI2CBuffer[3] = (data_wr >> 8) & 0xFF; 135 | XI2CBuffer[4] = (data_wr >> 0 ) & 0xFF; 136 | esp_err_t ret = XI2CWrite(i2c_num, i2c_add, XI2CBuffer, 0x5); 137 | return ret; 138 | 139 | } 140 | 141 | /*X_Error X_UpdateByte(SensorsData Dev, uint8_t index, uint8_t AndData, uint8_t OrData) { 142 | X_Error Status = X_ERROR_NONE; 143 | uint8_t data; 144 | 145 | Status = X_RdByte(Dev, index, &data); 146 | if (Status == 0) { 147 | goto done; 148 | } 149 | data = (data & AndData) | OrData; 150 | Status = X_WrByte(Dev, index, data); 151 | done: 152 | return Status; 153 | }*/ 154 | 155 | esp_err_t X_RdBit(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t index, uint8_t bitNum, uint8_t *data_rd) { 156 | 157 | uint8_t b; 158 | esp_err_t ret; 159 | ret = X_RdByte(i2c_num, i2c_add, index, &b); 160 | if (ret == ESP_FAIL) { 161 | return ret; 162 | } 163 | *data_rd = b & (1 << bitNum); 164 | return ret; 165 | 166 | } 167 | 168 | esp_err_t X_RdBits(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t index, uint8_t bitStart, uint8_t length, uint8_t *data_rd) { 169 | 170 | uint8_t b; 171 | esp_err_t ret; 172 | ret = X_RdByte(i2c_num, i2c_add, index, &b); 173 | if (ret == ESP_FAIL) { 174 | return ret; 175 | } 176 | uint8_t mask = ((1 << length) - 1) << (bitStart - length + 1); 177 | b &= mask; 178 | b >>= (bitStart - length + 1); 179 | *data_rd = b; 180 | return ret; 181 | 182 | } 183 | 184 | esp_err_t X_RdWord(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t index, uint16_t *data_rd) { 185 | 186 | esp_err_t ret; 187 | 188 | ret = XI2CWrite(i2c_num, i2c_add, &index, 0x1); 189 | if (ret == ESP_FAIL) { 190 | return ret; 191 | } 192 | 193 | ret = XI2CRead(i2c_num, i2c_add, XI2CBuffer, 0x2); 194 | 195 | *data_rd = ((uint16_t)XI2CBuffer[0]<<8) + (uint16_t)XI2CBuffer[1]; 196 | return ret; 197 | 198 | } 199 | 200 | esp_err_t X_RdDWord(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t index, uint32_t *data_rd) { 201 | 202 | esp_err_t ret; 203 | 204 | ret = XI2CWrite(i2c_num, i2c_add, &index, 0x1); 205 | if (ret == ESP_FAIL) { 206 | return ret; 207 | } 208 | 209 | ret = XI2CRead(i2c_num, i2c_add, XI2CBuffer, 0x4); 210 | 211 | *data_rd = ((uint32_t)XI2CBuffer[0]<<24) + ((uint32_t)XI2CBuffer[1]<<16) + ((uint32_t)XI2CBuffer[2]<<8) + (uint32_t)XI2CBuffer[3]; 212 | return ret; 213 | 214 | } 215 | 216 | esp_err_t X_PollingDelay(void) { 217 | 218 | esp_err_t ret; 219 | X_OsDelay(); 220 | ret = ESP_OK; 221 | return ret; 222 | 223 | } 224 | -------------------------------------------------------------------------------- /OLED_Ether_demo/main/xi2c.h: -------------------------------------------------------------------------------- 1 | #ifndef I2C_H_ 2 | #define I2C_H_ 3 | 4 | #include "driver/i2c.h" 5 | #include "stdio.h" 6 | #include "string.h" 7 | #include "esp_system.h" 8 | #include 9 | #include "freertos/FreeRTOS.h" 10 | #include "freertos/task.h" 11 | 12 | #define X_OsDelay(...) vTaskDelay(20) 13 | 14 | #define ACK_CHECK_EN 0x1 /*!< I2C master will check ack from slave*/ 15 | #define ACK_CHECK_DIS 0x0 /*!< I2C master will not check ack from slave */ 16 | #define ACK_VAL 0x0 /*!< I2C ack value */ 17 | #define NACK_VAL 0x1 /*!< I2C nack value */ 18 | 19 | uint8_t XI2CBuffer[512]; 20 | 21 | esp_err_t X_WriteMulti(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t index, uint32_t count, uint8_t* data_wr); 22 | esp_err_t X_ReadMulti(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t index, uint32_t count, uint8_t* data_rd); 23 | esp_err_t X_WrByte(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t index, uint8_t data_wr); 24 | esp_err_t X_RdByte(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t index, uint8_t *data_rd); 25 | esp_err_t X_WrBit(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t index, uint8_t bitNum, uint8_t data_wr); 26 | esp_err_t X_WrBits(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t index, uint8_t bitStart, uint8_t length, uint8_t data_wr); 27 | esp_err_t X_WrWord(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t index, uint8_t data_wr); 28 | esp_err_t X_WrDWord(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t index, uint8_t data_wr); 29 | esp_err_t X_RdBit(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t index, uint8_t bitNum, uint8_t *data_rd); 30 | esp_err_t X_RdBits(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t index, uint8_t bitStart, uint8_t length, uint8_t *data_rd); 31 | esp_err_t X_RdWord(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t index, uint16_t *data_rd); 32 | esp_err_t X_RdDWord(i2c_port_t i2c_num, uint8_t i2c_add, uint8_t index, uint32_t *data_rd); 33 | esp_err_t X_PollingDelay(void); 34 | 35 | #endif /* I2C_H_ */ 36 | -------------------------------------------------------------------------------- /OLED_Ether_demo/sdkconfig: -------------------------------------------------------------------------------- 1 | # 2 | # Automatically generated file; DO NOT EDIT. 3 | # Espressif IoT Development Framework Configuration 4 | # 5 | 6 | # 7 | # SDK tool configuration 8 | # 9 | CONFIG_TOOLPREFIX="xtensa-esp32-elf-" 10 | CONFIG_PYTHON="python" 11 | 12 | # 13 | # Bootloader config 14 | # 15 | # CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set 16 | # CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set 17 | # CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set 18 | CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y 19 | # CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set 20 | # CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set 21 | CONFIG_LOG_BOOTLOADER_LEVEL=3 22 | 23 | # 24 | # Security features 25 | # 26 | # CONFIG_SECURE_BOOT_ENABLED is not set 27 | # CONFIG_FLASH_ENCRYPTION_ENABLED is not set 28 | 29 | # 30 | # Serial flasher config 31 | # 32 | CONFIG_ESPTOOLPY_PORT="/dev/tty.usbserial-DN01AN96" 33 | # CONFIG_ESPTOOLPY_BAUD_115200B is not set 34 | # CONFIG_ESPTOOLPY_BAUD_230400B is not set 35 | CONFIG_ESPTOOLPY_BAUD_921600B=y 36 | # CONFIG_ESPTOOLPY_BAUD_2MB is not set 37 | # CONFIG_ESPTOOLPY_BAUD_OTHER is not set 38 | CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200 39 | CONFIG_ESPTOOLPY_BAUD=921600 40 | CONFIG_ESPTOOLPY_COMPRESSED=y 41 | # CONFIG_FLASHMODE_QIO is not set 42 | # CONFIG_FLASHMODE_QOUT is not set 43 | CONFIG_FLASHMODE_DIO=y 44 | # CONFIG_FLASHMODE_DOUT is not set 45 | CONFIG_ESPTOOLPY_FLASHMODE="dio" 46 | # CONFIG_ESPTOOLPY_FLASHFREQ_80M is not set 47 | CONFIG_ESPTOOLPY_FLASHFREQ_40M=y 48 | # CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set 49 | # CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set 50 | CONFIG_ESPTOOLPY_FLASHFREQ="40m" 51 | # CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set 52 | CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y 53 | # CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set 54 | # CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set 55 | # CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set 56 | CONFIG_ESPTOOLPY_FLASHSIZE="2MB" 57 | CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y 58 | CONFIG_ESPTOOLPY_BEFORE_RESET=y 59 | # CONFIG_ESPTOOLPY_BEFORE_NORESET is not set 60 | CONFIG_ESPTOOLPY_BEFORE="default_reset" 61 | CONFIG_ESPTOOLPY_AFTER_RESET=y 62 | # CONFIG_ESPTOOLPY_AFTER_NORESET is not set 63 | CONFIG_ESPTOOLPY_AFTER="hard_reset" 64 | # CONFIG_MONITOR_BAUD_9600B is not set 65 | # CONFIG_MONITOR_BAUD_57600B is not set 66 | CONFIG_MONITOR_BAUD_115200B=y 67 | # CONFIG_MONITOR_BAUD_230400B is not set 68 | # CONFIG_MONITOR_BAUD_921600B is not set 69 | # CONFIG_MONITOR_BAUD_2MB is not set 70 | # CONFIG_MONITOR_BAUD_OTHER is not set 71 | CONFIG_MONITOR_BAUD_OTHER_VAL=115200 72 | CONFIG_MONITOR_BAUD=115200 73 | 74 | # 75 | # Partition Table 76 | # 77 | CONFIG_PARTITION_TABLE_SINGLE_APP=y 78 | # CONFIG_PARTITION_TABLE_TWO_OTA is not set 79 | # CONFIG_PARTITION_TABLE_CUSTOM is not set 80 | CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" 81 | CONFIG_PARTITION_TABLE_CUSTOM_APP_BIN_OFFSET=0x10000 82 | CONFIG_PARTITION_TABLE_FILENAME="partitions_singleapp.csv" 83 | CONFIG_APP_OFFSET=0x10000 84 | CONFIG_PHY_DATA_OFFSET=0xf000 85 | CONFIG_OPTIMIZATION_LEVEL_DEBUG=y 86 | # CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set 87 | 88 | # 89 | # Component config 90 | # 91 | # CONFIG_AWS_IOT_SDK is not set 92 | # CONFIG_BT_ENABLED is not set 93 | CONFIG_BT_RESERVE_DRAM=0 94 | 95 | # 96 | # ESP32-specific 97 | # 98 | # CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set 99 | # CONFIG_ESP32_DEFAULT_CPU_FREQ_160 is not set 100 | CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y 101 | CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240 102 | CONFIG_MEMMAP_SMP=y 103 | # CONFIG_MEMMAP_TRACEMEM is not set 104 | CONFIG_TRACEMEM_RESERVE_DRAM=0x0 105 | # CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set 106 | # CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set 107 | CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y 108 | # CONFIG_ESP32_ENABLE_COREDUMP is not set 109 | # CONFIG_TWO_MAC_ADDRESS_FROM_EFUSE is not set 110 | CONFIG_FOUR_MAC_ADDRESS_FROM_EFUSE=y 111 | CONFIG_NUMBER_OF_MAC_ADDRESS_GENERATED_FROM_EFUSE=4 112 | CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 113 | CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=4096 114 | CONFIG_MAIN_TASK_STACK_SIZE=4096 115 | CONFIG_NEWLIB_STDOUT_ADDCR=y 116 | # CONFIG_NEWLIB_NANO_FORMAT is not set 117 | CONFIG_CONSOLE_UART_DEFAULT=y 118 | # CONFIG_CONSOLE_UART_CUSTOM is not set 119 | # CONFIG_CONSOLE_UART_NONE is not set 120 | CONFIG_CONSOLE_UART_NUM=0 121 | CONFIG_CONSOLE_UART_BAUDRATE=115200 122 | # CONFIG_ULP_COPROC_ENABLED is not set 123 | CONFIG_ULP_COPROC_RESERVE_MEM=0 124 | # CONFIG_ESP32_PANIC_PRINT_HALT is not set 125 | CONFIG_ESP32_PANIC_PRINT_REBOOT=y 126 | # CONFIG_ESP32_PANIC_SILENT_REBOOT is not set 127 | # CONFIG_ESP32_PANIC_GDBSTUB is not set 128 | CONFIG_ESP32_DEBUG_OCDAWARE=y 129 | CONFIG_INT_WDT=y 130 | CONFIG_INT_WDT_TIMEOUT_MS=300 131 | CONFIG_INT_WDT_CHECK_CPU1=y 132 | CONFIG_TASK_WDT=y 133 | # CONFIG_TASK_WDT_PANIC is not set 134 | CONFIG_TASK_WDT_TIMEOUT_S=5 135 | CONFIG_TASK_WDT_CHECK_IDLE_TASK=y 136 | CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y 137 | # CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set 138 | CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y 139 | # CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set 140 | # CONFIG_ESP32_TIME_SYSCALL_USE_NONE is not set 141 | CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y 142 | CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=0 143 | CONFIG_WIFI_ENABLED=y 144 | CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 145 | CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=0 146 | # CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set 147 | CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y 148 | CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 149 | CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32 150 | CONFIG_ESP32_WIFI_AMPDU_ENABLED=y 151 | CONFIG_ESP32_WIFI_NVS_ENABLED=y 152 | CONFIG_PHY_ENABLED=y 153 | 154 | # 155 | # PHY 156 | # 157 | CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y 158 | # CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set 159 | CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 160 | CONFIG_ESP32_PHY_MAX_TX_POWER=20 161 | CONFIG_ETHERNET=y 162 | CONFIG_DMA_RX_BUF_NUM=10 163 | CONFIG_DMA_TX_BUF_NUM=10 164 | # CONFIG_EMAC_L2_TO_L3_RX_BUF_MODE is not set 165 | CONFIG_EMAC_TASK_PRIORITY=20 166 | # CONFIG_PHY_TLK110 is not set 167 | CONFIG_PHY_LAN8720=y 168 | CONFIG_PHY_ID=0 169 | 170 | # 171 | # FAT Filesystem support 172 | # 173 | CONFIG_FATFS_CODEPAGE_ASCII=y 174 | # CONFIG_FATFS_CODEPAGE_437 is not set 175 | # CONFIG_FATFS_CODEPAGE_720 is not set 176 | # CONFIG_FATFS_CODEPAGE_737 is not set 177 | # CONFIG_FATFS_CODEPAGE_771 is not set 178 | # CONFIG_FATFS_CODEPAGE_775 is not set 179 | # CONFIG_FATFS_CODEPAGE_850 is not set 180 | # CONFIG_FATFS_CODEPAGE_852 is not set 181 | # CONFIG_FATFS_CODEPAGE_855 is not set 182 | # CONFIG_FATFS_CODEPAGE_857 is not set 183 | # CONFIG_FATFS_CODEPAGE_860 is not set 184 | # CONFIG_FATFS_CODEPAGE_861 is not set 185 | # CONFIG_FATFS_CODEPAGE_862 is not set 186 | # CONFIG_FATFS_CODEPAGE_863 is not set 187 | # CONFIG_FATFS_CODEPAGE_864 is not set 188 | # CONFIG_FATFS_CODEPAGE_865 is not set 189 | # CONFIG_FATFS_CODEPAGE_866 is not set 190 | # CONFIG_FATFS_CODEPAGE_869 is not set 191 | # CONFIG_FATFS_CODEPAGE_932 is not set 192 | # CONFIG_FATFS_CODEPAGE_936 is not set 193 | # CONFIG_FATFS_CODEPAGE_949 is not set 194 | # CONFIG_FATFS_CODEPAGE_950 is not set 195 | CONFIG_FATFS_CODEPAGE=1 196 | CONFIG_FATFS_MAX_LFN=255 197 | 198 | # 199 | # FreeRTOS 200 | # 201 | # CONFIG_FREERTOS_UNICORE is not set 202 | CONFIG_FREERTOS_CORETIMER_0=y 203 | # CONFIG_FREERTOS_CORETIMER_1 is not set 204 | CONFIG_FREERTOS_HZ=100 205 | CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION=y 206 | # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set 207 | # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set 208 | CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y 209 | # CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set 210 | CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 211 | CONFIG_FREERTOS_ASSERT_FAIL_ABORT=y 212 | # CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE is not set 213 | # CONFIG_FREERTOS_ASSERT_DISABLE is not set 214 | CONFIG_FREERTOS_BREAK_ON_SCHEDULER_START_JTAG=y 215 | # CONFIG_ENABLE_MEMORY_DEBUG is not set 216 | CONFIG_FREERTOS_ISR_STACKSIZE=1536 217 | # CONFIG_FREERTOS_LEGACY_HOOKS is not set 218 | CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 219 | # CONFIG_SUPPORT_STATIC_ALLOCATION is not set 220 | CONFIG_TIMER_TASK_PRIORITY=1 221 | CONFIG_TIMER_TASK_STACK_DEPTH=2048 222 | CONFIG_TIMER_QUEUE_LENGTH=10 223 | # CONFIG_FREERTOS_DEBUG_INTERNALS is not set 224 | 225 | # 226 | # Log output 227 | # 228 | # CONFIG_LOG_DEFAULT_LEVEL_NONE is not set 229 | # CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set 230 | # CONFIG_LOG_DEFAULT_LEVEL_WARN is not set 231 | CONFIG_LOG_DEFAULT_LEVEL_INFO=y 232 | # CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set 233 | # CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set 234 | CONFIG_LOG_DEFAULT_LEVEL=3 235 | CONFIG_LOG_COLORS=y 236 | 237 | # 238 | # LWIP 239 | # 240 | # CONFIG_L2_TO_L3_COPY is not set 241 | CONFIG_LWIP_MAX_SOCKETS=10 242 | CONFIG_LWIP_THREAD_LOCAL_STORAGE_INDEX=0 243 | # CONFIG_LWIP_SO_REUSE is not set 244 | # CONFIG_LWIP_SO_RCVBUF is not set 245 | CONFIG_LWIP_DHCP_MAX_NTP_SERVERS=1 246 | # CONFIG_LWIP_IP_FRAG is not set 247 | # CONFIG_LWIP_IP_REASSEMBLY is not set 248 | CONFIG_TCP_MAXRTX=12 249 | CONFIG_TCP_SYNMAXRTX=6 250 | CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y 251 | 252 | # 253 | # mbedTLS 254 | # 255 | CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=16384 256 | # CONFIG_MBEDTLS_DEBUG is not set 257 | CONFIG_MBEDTLS_HARDWARE_AES=y 258 | CONFIG_MBEDTLS_HARDWARE_MPI=y 259 | CONFIG_MBEDTLS_MPI_USE_INTERRUPT=y 260 | CONFIG_MBEDTLS_HARDWARE_SHA=y 261 | CONFIG_MBEDTLS_HAVE_TIME=y 262 | # CONFIG_MBEDTLS_HAVE_TIME_DATE is not set 263 | 264 | # 265 | # OpenSSL 266 | # 267 | # CONFIG_OPENSSL_DEBUG is not set 268 | CONFIG_OPENSSL_ASSERT_DO_NOTHING=y 269 | # CONFIG_OPENSSL_ASSERT_EXIT is not set 270 | 271 | # 272 | # SPI Flash driver 273 | # 274 | # CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set 275 | -------------------------------------------------------------------------------- /OLED_Ether_demo/sdkconfig.old: -------------------------------------------------------------------------------- 1 | # 2 | # Automatically generated file; DO NOT EDIT. 3 | # Espressif IoT Development Framework Configuration 4 | # 5 | 6 | # 7 | # SDK tool configuration 8 | # 9 | CONFIG_TOOLPREFIX="xtensa-esp32-elf-" 10 | CONFIG_PYTHON="python" 11 | 12 | # 13 | # Bootloader config 14 | # 15 | # CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set 16 | # CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set 17 | # CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set 18 | CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y 19 | # CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set 20 | # CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set 21 | CONFIG_LOG_BOOTLOADER_LEVEL=3 22 | 23 | # 24 | # Security features 25 | # 26 | # CONFIG_SECURE_BOOT_ENABLED is not set 27 | # CONFIG_FLASH_ENCRYPTION_ENABLED is not set 28 | 29 | # 30 | # Serial flasher config 31 | # 32 | CONFIG_ESPTOOLPY_PORT="/dev/tty.usbserial-DN01AK87" 33 | # CONFIG_ESPTOOLPY_BAUD_115200B is not set 34 | # CONFIG_ESPTOOLPY_BAUD_230400B is not set 35 | CONFIG_ESPTOOLPY_BAUD_921600B=y 36 | # CONFIG_ESPTOOLPY_BAUD_2MB is not set 37 | # CONFIG_ESPTOOLPY_BAUD_OTHER is not set 38 | CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200 39 | CONFIG_ESPTOOLPY_BAUD=921600 40 | CONFIG_ESPTOOLPY_COMPRESSED=y 41 | # CONFIG_FLASHMODE_QIO is not set 42 | # CONFIG_FLASHMODE_QOUT is not set 43 | CONFIG_FLASHMODE_DIO=y 44 | # CONFIG_FLASHMODE_DOUT is not set 45 | CONFIG_ESPTOOLPY_FLASHMODE="dio" 46 | # CONFIG_ESPTOOLPY_FLASHFREQ_80M is not set 47 | CONFIG_ESPTOOLPY_FLASHFREQ_40M=y 48 | # CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set 49 | # CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set 50 | CONFIG_ESPTOOLPY_FLASHFREQ="40m" 51 | # CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set 52 | CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y 53 | # CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set 54 | # CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set 55 | # CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set 56 | CONFIG_ESPTOOLPY_FLASHSIZE="2MB" 57 | CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y 58 | CONFIG_ESPTOOLPY_BEFORE_RESET=y 59 | # CONFIG_ESPTOOLPY_BEFORE_NORESET is not set 60 | CONFIG_ESPTOOLPY_BEFORE="default_reset" 61 | CONFIG_ESPTOOLPY_AFTER_RESET=y 62 | # CONFIG_ESPTOOLPY_AFTER_NORESET is not set 63 | CONFIG_ESPTOOLPY_AFTER="hard_reset" 64 | # CONFIG_MONITOR_BAUD_9600B is not set 65 | # CONFIG_MONITOR_BAUD_57600B is not set 66 | CONFIG_MONITOR_BAUD_115200B=y 67 | # CONFIG_MONITOR_BAUD_230400B is not set 68 | # CONFIG_MONITOR_BAUD_921600B is not set 69 | # CONFIG_MONITOR_BAUD_2MB is not set 70 | # CONFIG_MONITOR_BAUD_OTHER is not set 71 | CONFIG_MONITOR_BAUD_OTHER_VAL=115200 72 | CONFIG_MONITOR_BAUD=115200 73 | 74 | # 75 | # Partition Table 76 | # 77 | CONFIG_PARTITION_TABLE_SINGLE_APP=y 78 | # CONFIG_PARTITION_TABLE_TWO_OTA is not set 79 | # CONFIG_PARTITION_TABLE_CUSTOM is not set 80 | CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" 81 | CONFIG_PARTITION_TABLE_CUSTOM_APP_BIN_OFFSET=0x10000 82 | CONFIG_PARTITION_TABLE_FILENAME="partitions_singleapp.csv" 83 | CONFIG_APP_OFFSET=0x10000 84 | CONFIG_PHY_DATA_OFFSET=0xf000 85 | CONFIG_OPTIMIZATION_LEVEL_DEBUG=y 86 | # CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set 87 | 88 | # 89 | # Component config 90 | # 91 | # CONFIG_AWS_IOT_SDK is not set 92 | # CONFIG_BT_ENABLED is not set 93 | CONFIG_BT_RESERVE_DRAM=0 94 | 95 | # 96 | # ESP32-specific 97 | # 98 | # CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set 99 | # CONFIG_ESP32_DEFAULT_CPU_FREQ_160 is not set 100 | CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y 101 | CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240 102 | CONFIG_MEMMAP_SMP=y 103 | # CONFIG_MEMMAP_TRACEMEM is not set 104 | CONFIG_TRACEMEM_RESERVE_DRAM=0x0 105 | # CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set 106 | # CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set 107 | CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y 108 | # CONFIG_ESP32_ENABLE_COREDUMP is not set 109 | # CONFIG_TWO_MAC_ADDRESS_FROM_EFUSE is not set 110 | CONFIG_FOUR_MAC_ADDRESS_FROM_EFUSE=y 111 | CONFIG_NUMBER_OF_MAC_ADDRESS_GENERATED_FROM_EFUSE=4 112 | CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 113 | CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=4096 114 | CONFIG_MAIN_TASK_STACK_SIZE=4096 115 | CONFIG_NEWLIB_STDOUT_ADDCR=y 116 | # CONFIG_NEWLIB_NANO_FORMAT is not set 117 | CONFIG_CONSOLE_UART_DEFAULT=y 118 | # CONFIG_CONSOLE_UART_CUSTOM is not set 119 | # CONFIG_CONSOLE_UART_NONE is not set 120 | CONFIG_CONSOLE_UART_NUM=0 121 | CONFIG_CONSOLE_UART_BAUDRATE=115200 122 | # CONFIG_ULP_COPROC_ENABLED is not set 123 | CONFIG_ULP_COPROC_RESERVE_MEM=0 124 | # CONFIG_ESP32_PANIC_PRINT_HALT is not set 125 | CONFIG_ESP32_PANIC_PRINT_REBOOT=y 126 | # CONFIG_ESP32_PANIC_SILENT_REBOOT is not set 127 | # CONFIG_ESP32_PANIC_GDBSTUB is not set 128 | CONFIG_ESP32_DEBUG_OCDAWARE=y 129 | CONFIG_INT_WDT=y 130 | CONFIG_INT_WDT_TIMEOUT_MS=300 131 | CONFIG_INT_WDT_CHECK_CPU1=y 132 | CONFIG_TASK_WDT=y 133 | # CONFIG_TASK_WDT_PANIC is not set 134 | CONFIG_TASK_WDT_TIMEOUT_S=5 135 | CONFIG_TASK_WDT_CHECK_IDLE_TASK=y 136 | CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y 137 | # CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set 138 | CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y 139 | # CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set 140 | # CONFIG_ESP32_TIME_SYSCALL_USE_NONE is not set 141 | CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y 142 | CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=0 143 | CONFIG_WIFI_ENABLED=y 144 | CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 145 | CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=0 146 | # CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set 147 | CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y 148 | CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 149 | CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32 150 | CONFIG_ESP32_WIFI_AMPDU_ENABLED=y 151 | CONFIG_ESP32_WIFI_NVS_ENABLED=y 152 | CONFIG_PHY_ENABLED=y 153 | 154 | # 155 | # PHY 156 | # 157 | CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y 158 | # CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set 159 | CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 160 | CONFIG_ESP32_PHY_MAX_TX_POWER=20 161 | CONFIG_ETHERNET=y 162 | CONFIG_DMA_RX_BUF_NUM=10 163 | CONFIG_DMA_TX_BUF_NUM=10 164 | # CONFIG_EMAC_L2_TO_L3_RX_BUF_MODE is not set 165 | CONFIG_EMAC_TASK_PRIORITY=20 166 | # CONFIG_PHY_TLK110 is not set 167 | CONFIG_PHY_LAN8720=y 168 | CONFIG_PHY_ID=0 169 | 170 | # 171 | # FAT Filesystem support 172 | # 173 | CONFIG_FATFS_CODEPAGE_ASCII=y 174 | # CONFIG_FATFS_CODEPAGE_437 is not set 175 | # CONFIG_FATFS_CODEPAGE_720 is not set 176 | # CONFIG_FATFS_CODEPAGE_737 is not set 177 | # CONFIG_FATFS_CODEPAGE_771 is not set 178 | # CONFIG_FATFS_CODEPAGE_775 is not set 179 | # CONFIG_FATFS_CODEPAGE_850 is not set 180 | # CONFIG_FATFS_CODEPAGE_852 is not set 181 | # CONFIG_FATFS_CODEPAGE_855 is not set 182 | # CONFIG_FATFS_CODEPAGE_857 is not set 183 | # CONFIG_FATFS_CODEPAGE_860 is not set 184 | # CONFIG_FATFS_CODEPAGE_861 is not set 185 | # CONFIG_FATFS_CODEPAGE_862 is not set 186 | # CONFIG_FATFS_CODEPAGE_863 is not set 187 | # CONFIG_FATFS_CODEPAGE_864 is not set 188 | # CONFIG_FATFS_CODEPAGE_865 is not set 189 | # CONFIG_FATFS_CODEPAGE_866 is not set 190 | # CONFIG_FATFS_CODEPAGE_869 is not set 191 | # CONFIG_FATFS_CODEPAGE_932 is not set 192 | # CONFIG_FATFS_CODEPAGE_936 is not set 193 | # CONFIG_FATFS_CODEPAGE_949 is not set 194 | # CONFIG_FATFS_CODEPAGE_950 is not set 195 | CONFIG_FATFS_CODEPAGE=1 196 | CONFIG_FATFS_MAX_LFN=255 197 | 198 | # 199 | # FreeRTOS 200 | # 201 | # CONFIG_FREERTOS_UNICORE is not set 202 | CONFIG_FREERTOS_CORETIMER_0=y 203 | # CONFIG_FREERTOS_CORETIMER_1 is not set 204 | CONFIG_FREERTOS_HZ=100 205 | CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION=y 206 | # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set 207 | # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set 208 | CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y 209 | # CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set 210 | CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 211 | CONFIG_FREERTOS_ASSERT_FAIL_ABORT=y 212 | # CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE is not set 213 | # CONFIG_FREERTOS_ASSERT_DISABLE is not set 214 | CONFIG_FREERTOS_BREAK_ON_SCHEDULER_START_JTAG=y 215 | # CONFIG_ENABLE_MEMORY_DEBUG is not set 216 | CONFIG_FREERTOS_ISR_STACKSIZE=1536 217 | # CONFIG_FREERTOS_LEGACY_HOOKS is not set 218 | CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 219 | # CONFIG_SUPPORT_STATIC_ALLOCATION is not set 220 | CONFIG_TIMER_TASK_PRIORITY=1 221 | CONFIG_TIMER_TASK_STACK_DEPTH=2048 222 | CONFIG_TIMER_QUEUE_LENGTH=10 223 | # CONFIG_FREERTOS_DEBUG_INTERNALS is not set 224 | 225 | # 226 | # Log output 227 | # 228 | # CONFIG_LOG_DEFAULT_LEVEL_NONE is not set 229 | # CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set 230 | # CONFIG_LOG_DEFAULT_LEVEL_WARN is not set 231 | CONFIG_LOG_DEFAULT_LEVEL_INFO=y 232 | # CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set 233 | # CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set 234 | CONFIG_LOG_DEFAULT_LEVEL=3 235 | CONFIG_LOG_COLORS=y 236 | 237 | # 238 | # LWIP 239 | # 240 | # CONFIG_L2_TO_L3_COPY is not set 241 | CONFIG_LWIP_MAX_SOCKETS=10 242 | CONFIG_LWIP_THREAD_LOCAL_STORAGE_INDEX=0 243 | # CONFIG_LWIP_SO_REUSE is not set 244 | # CONFIG_LWIP_SO_RCVBUF is not set 245 | CONFIG_LWIP_DHCP_MAX_NTP_SERVERS=1 246 | # CONFIG_LWIP_IP_FRAG is not set 247 | # CONFIG_LWIP_IP_REASSEMBLY is not set 248 | CONFIG_TCP_MAXRTX=12 249 | CONFIG_TCP_SYNMAXRTX=6 250 | CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y 251 | 252 | # 253 | # mbedTLS 254 | # 255 | CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=16384 256 | # CONFIG_MBEDTLS_DEBUG is not set 257 | CONFIG_MBEDTLS_HARDWARE_AES=y 258 | CONFIG_MBEDTLS_HARDWARE_MPI=y 259 | CONFIG_MBEDTLS_MPI_USE_INTERRUPT=y 260 | CONFIG_MBEDTLS_HARDWARE_SHA=y 261 | CONFIG_MBEDTLS_HAVE_TIME=y 262 | # CONFIG_MBEDTLS_HAVE_TIME_DATE is not set 263 | 264 | # 265 | # OpenSSL 266 | # 267 | # CONFIG_OPENSSL_DEBUG is not set 268 | CONFIG_OPENSSL_ASSERT_DO_NOTHING=y 269 | # CONFIG_OPENSSL_ASSERT_EXIT is not set 270 | 271 | # 272 | # SPI Flash driver 273 | # 274 | # CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set 275 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ESP32_OLED_LAN8720_sample 2 | Sample code for "ESP32 Monster board" with LAN8720 and SH1106 OLED display 3 | details can be found at https://www.tindie.com/products/microwavemont/esp32-monster-board-ether-can-oled-all-in-one/ 4 | --------------------------------------------------------------------------------