Compare commits
	
		
			1 Commits 
		
	
	
		
			text_rende
			...
			master
		
	
	| Author | SHA1 | Date | 
|---|---|---|
|  | f4b0d0f07e | 5 years ago | 
| @ -1,6 +1,6 @@ | |||||||
| # The following lines of boilerplate have to be in your project's | # The following lines of boilerplate have to be in your project's | ||||||
| # CMakeLists in this exact order for cmake to work correctly | # CMakeLists in this exact order for cmake to work correctly | ||||||
| cmake_minimum_required(VERSION 3.16) | cmake_minimum_required(VERSION 3.5) | ||||||
| 
 | 
 | ||||||
| include($ENV{IDF_PATH}/tools/cmake/project.cmake) | include($ENV{IDF_PATH}/tools/cmake/project.cmake) | ||||||
| project(hello_world) | project(hello-world) | ||||||
| @ -1,3 +1,2 @@ | |||||||
| idf_component_register(SRCS "main.c" "font.c" "display.c" "text.c" "wlan.c" "https.c" "lwjson/lwjson/src/lwjson/lwjson.c" | idf_component_register(SRCS "hello_world_main.c" | ||||||
|                     REQUIRES esp_driver_gpio esp_wifi nvs_flash esp_timer esp-tls |                     INCLUDE_DIRS "") | ||||||
|                     INCLUDE_DIRS "." "lwjson/lwjson/src/include") |  | ||||||
| @ -1,67 +0,0 @@ | |||||||
| menu "WiFi Credentials" |  | ||||||
| 
 |  | ||||||
|     config ESP_WIFI_SSID |  | ||||||
|         string "WiFi SSID" |  | ||||||
|         default "myssid" |  | ||||||
|         help |  | ||||||
|             SSID (network name) for the example to connect to. |  | ||||||
| 
 |  | ||||||
|     config ESP_WIFI_PASSWORD |  | ||||||
|         string "WiFi Password" |  | ||||||
|         default "mypassword" |  | ||||||
|         help |  | ||||||
|             WiFi password (WPA or WPA2) for the example to use. |  | ||||||
| 
 |  | ||||||
|     choice ESP_WIFI_SAE_MODE |  | ||||||
|         prompt "WPA3 SAE mode selection" |  | ||||||
|         default ESP_WPA3_SAE_PWE_BOTH |  | ||||||
|         help |  | ||||||
|             Select mode for SAE as Hunt and Peck, H2E or both. |  | ||||||
|         config ESP_WPA3_SAE_PWE_HUNT_AND_PECK |  | ||||||
|             bool "HUNT AND PECK" |  | ||||||
|         config ESP_WPA3_SAE_PWE_HASH_TO_ELEMENT |  | ||||||
|             bool "H2E" |  | ||||||
|         config ESP_WPA3_SAE_PWE_BOTH |  | ||||||
|             bool "BOTH" |  | ||||||
|     endchoice |  | ||||||
| 
 |  | ||||||
|     config ESP_WIFI_PW_ID |  | ||||||
|         string "PASSWORD IDENTIFIER" |  | ||||||
|         depends on  ESP_WPA3_SAE_PWE_HASH_TO_ELEMENT|| ESP_WPA3_SAE_PWE_BOTH |  | ||||||
|         default "" |  | ||||||
|         help |  | ||||||
|             password identifier for SAE H2E |  | ||||||
| 
 |  | ||||||
|     config ESP_MAXIMUM_RETRY |  | ||||||
|         int "Maximum retry" |  | ||||||
|         default 5 |  | ||||||
|         help |  | ||||||
|             Set the Maximum retry to avoid station reconnecting to the AP unlimited when the AP is really inexistent. |  | ||||||
| 
 |  | ||||||
|     choice ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD |  | ||||||
|         prompt "WiFi Scan auth mode threshold" |  | ||||||
|         default ESP_WIFI_AUTH_WPA2_PSK |  | ||||||
|         help |  | ||||||
|             The weakest authmode to accept in the scan mode. |  | ||||||
|             This value defaults to ESP_WIFI_AUTH_WPA2_PSK incase password is present and ESP_WIFI_AUTH_OPEN is used. |  | ||||||
|             Please select ESP_WIFI_AUTH_WEP/ESP_WIFI_AUTH_WPA_PSK incase AP is operating in WEP/WPA mode. |  | ||||||
| 
 |  | ||||||
|         config ESP_WIFI_AUTH_OPEN |  | ||||||
|             bool "OPEN" |  | ||||||
|         config ESP_WIFI_AUTH_WEP |  | ||||||
|             bool "WEP" |  | ||||||
|         config ESP_WIFI_AUTH_WPA_PSK |  | ||||||
|             bool "WPA PSK" |  | ||||||
|         config ESP_WIFI_AUTH_WPA2_PSK |  | ||||||
|             bool "WPA2 PSK" |  | ||||||
|         config ESP_WIFI_AUTH_WPA_WPA2_PSK |  | ||||||
|             bool "WPA/WPA2 PSK" |  | ||||||
|         config ESP_WIFI_AUTH_WPA3_PSK |  | ||||||
|             bool "WPA3 PSK" |  | ||||||
|         config ESP_WIFI_AUTH_WPA2_WPA3_PSK |  | ||||||
|             bool "WPA2/WPA3 PSK" |  | ||||||
|         config ESP_WIFI_AUTH_WAPI_PSK |  | ||||||
|             bool "WAPI PSK" |  | ||||||
|     endchoice |  | ||||||
| 
 |  | ||||||
| endmenu |  | ||||||
| @ -1 +0,0 @@ | |||||||
| Subproject commit cb8693b058ba302f4829ec6d03f609ac6f848546 |  | ||||||
| @ -1,74 +0,0 @@ | |||||||
| #include "driver/gpio.h" |  | ||||||
| #include "display.h" |  | ||||||
| 
 |  | ||||||
| uint8_t fb[64][128][3]; |  | ||||||
| 
 |  | ||||||
| void write_bits(uint8_t r1, uint8_t g1, uint8_t b1, uint8_t r2, uint8_t g2, uint8_t b2){ |  | ||||||
|     gpio_set_level(GPIO_R1, r1);   |  | ||||||
|     gpio_set_level(GPIO_G1, g1); |  | ||||||
|     gpio_set_level(GPIO_B1, b1); |  | ||||||
|     gpio_set_level(GPIO_R2, r2); |  | ||||||
|     gpio_set_level(GPIO_G2, g2); |  | ||||||
|     gpio_set_level(GPIO_B2, b2); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void write_address(uint8_t addr){ |  | ||||||
|     gpio_set_level(GPIO_A, addr&0x01); |  | ||||||
|     gpio_set_level(GPIO_B, (addr&0x02)>>1); |  | ||||||
|     gpio_set_level(GPIO_C, (addr&0x04)>>2); |  | ||||||
|     gpio_set_level(GPIO_D, (addr&0x08)>>3); |  | ||||||
|     gpio_set_level(GPIO_E, (addr&0x10)>>4); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void latch(){ |  | ||||||
|     gpio_set_level(GPIO_LAT, 0); |  | ||||||
|     gpio_set_level(GPIO_LAT, 1); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static void clock(){ |  | ||||||
|     gpio_set_level(GPIO_CLK, 1); |  | ||||||
|     gpio_set_level(GPIO_CLK, 0); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void display_init(){ |  | ||||||
|     gpio_config_t io_conf; |  | ||||||
|     //disable interrupt
 |  | ||||||
|     io_conf.intr_type = GPIO_INTR_DISABLE; |  | ||||||
|     //set as output mode
 |  | ||||||
|     io_conf.mode = GPIO_MODE_OUTPUT; |  | ||||||
|     //bit mask of the pins that you want to set,e.g.GPIO18/19
 |  | ||||||
|     io_conf.pin_bit_mask = |  | ||||||
|          (1ULL<<GPIO_LAT)|(1ULL<<GPIO_OE)|(1ULL<<GPIO_CLK) |  | ||||||
|         |(1ULL<<GPIO_R1)|(1ULL<<GPIO_G1)|(1ULL<<GPIO_B1)|(1ULL<<GPIO_R2)|(1ULL<<GPIO_G2)|(1ULL<<GPIO_B2) |  | ||||||
|         |(1ULL<<GPIO_A)|(1ULL<<GPIO_B)|(1ULL<<GPIO_C)|(1ULL<<GPIO_D)|(1ULL<<GPIO_E); |  | ||||||
|     //disable pull-down mode
 |  | ||||||
|     io_conf.pull_down_en = 0; |  | ||||||
|     //disable pull-up mode
 |  | ||||||
|     io_conf.pull_up_en = 0; |  | ||||||
|     //configure GPIO with the given settings
 |  | ||||||
|     gpio_config(&io_conf); |  | ||||||
| 
 |  | ||||||
|     gpio_set_level(GPIO_OE, 0); |  | ||||||
| 
 |  | ||||||
|     write_bits(0,0,0,0,0,0); |  | ||||||
|     for(uint8_t i=0;i<128;i++){ |  | ||||||
|         clock(); |  | ||||||
|     } |  | ||||||
|     latch(); |  | ||||||
|     gpio_set_level(GPIO_OE, 1); |  | ||||||
|     gpio_set_level(GPIO_OE, 0); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void display_cycle(void* arg){ |  | ||||||
|     static uint8_t line = 0; |  | ||||||
| 
 |  | ||||||
|     for(uint8_t i=0;i<128;i++){ |  | ||||||
|         write_bits(fb[line][i][0],fb[line][i][1],fb[line][i][2],fb[32+line][i][0],fb[32+line][i][1],fb[32+line][i][2]); |  | ||||||
|         clock(); |  | ||||||
|     } |  | ||||||
|     gpio_set_level(GPIO_OE, 1); |  | ||||||
|     latch(); |  | ||||||
|     write_address(line); |  | ||||||
|     gpio_set_level(GPIO_OE, 0); |  | ||||||
|     line = (line + 1)%32; |  | ||||||
| } |  | ||||||
| @ -1,35 +0,0 @@ | |||||||
| #ifndef _DISPLAY_H_ |  | ||||||
| #define _DISPLAY_H_ |  | ||||||
| 
 |  | ||||||
| #include <stdint.h> |  | ||||||
| 
 |  | ||||||
| #define DISPLAY_WIDTH 128 |  | ||||||
| #define DISPLAY_HEIGHT 64  |  | ||||||
| 
 |  | ||||||
| #define GPIO_R1 25 |  | ||||||
| #define GPIO_G1 26 |  | ||||||
| #define GPIO_B1 27 |  | ||||||
| #define GPIO_R2 14 |  | ||||||
| #define GPIO_G2 12 |  | ||||||
| #define GPIO_B2 13 |  | ||||||
| 
 |  | ||||||
| #define GPIO_CLK 16 |  | ||||||
| #define GPIO_OE  15 |  | ||||||
| #define GPIO_LAT 4 |  | ||||||
| 
 |  | ||||||
| #define GPIO_A 23 |  | ||||||
| #define GPIO_B 19 |  | ||||||
| #define GPIO_C 5 |  | ||||||
| #define GPIO_D 17 |  | ||||||
| #define GPIO_E 18 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| extern uint8_t fb[64][128][3]; |  | ||||||
| 
 |  | ||||||
| void write_bits(uint8_t r1, uint8_t g1, uint8_t b1, uint8_t r2, uint8_t g2, uint8_t b2); |  | ||||||
| void write_address(uint8_t addr); |  | ||||||
| void latch(void); |  | ||||||
| void display_init(void); |  | ||||||
| void display_cycle(void* arg); |  | ||||||
| 
 |  | ||||||
| #endif |  | ||||||
| @ -1,256 +0,0 @@ | |||||||
| #include <stdint.h> |  | ||||||
| 
 |  | ||||||
| const uint8_t font[256][7] = { |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, //  
 |  | ||||||
| 	{0x5f,0x00,0x00,0x00,0x00,0x00,0x00}, // !
 |  | ||||||
| 	{0x03,0x00,0x03,0x00,0x00,0x00,0x00}, // "
 |  | ||||||
| 	{0x14,0x7f,0x14,0x7f,0x14,0x00,0x00}, // #
 |  | ||||||
| 	{0x6f,0x49,0xc9,0x7b,0x00,0x00,0x00}, // $
 |  | ||||||
| 	{0x63,0x13,0x08,0x64,0x63,0x00,0x00}, // %
 |  | ||||||
| 	{0x7f,0xc9,0x49,0x63,0x00,0x00,0x00}, // &
 |  | ||||||
| 	{0x03,0x00,0x00,0x00,0x00,0x00,0x00}, // '
 |  | ||||||
| 	{0x3e,0x41,0x00,0x00,0x00,0x00,0x00}, // (
 |  | ||||||
| 	{0x41,0x3e,0x00,0x00,0x00,0x00,0x00}, // )
 |  | ||||||
| 	{0x0a,0x04,0x1f,0x04,0x0a,0x00,0x00}, // *
 |  | ||||||
| 	{0x08,0x08,0x3e,0x08,0x08,0x00,0x00}, // +
 |  | ||||||
| 	{0xc0,0x00,0x00,0x00,0x00,0x00,0x00}, // ,
 |  | ||||||
| 	{0x08,0x08,0x08,0x08,0x00,0x00,0x00}, // -
 |  | ||||||
| 	{0x40,0x00,0x00,0x00,0x00,0x00,0x00}, // .
 |  | ||||||
| 	{0x60,0x10,0x08,0x04,0x03,0x00,0x00}, // /
 |  | ||||||
| 	{0x7f,0x41,0x41,0x7f,0x00,0x00,0x00}, // 0
 |  | ||||||
| 	{0x02,0x03,0x7f,0x00,0x00,0x00,0x00}, // 1
 |  | ||||||
| 	{0x7b,0x49,0x49,0x6f,0x00,0x00,0x00}, // 2
 |  | ||||||
| 	{0x63,0x49,0x49,0x7f,0x00,0x00,0x00}, // 3
 |  | ||||||
| 	{0x0f,0x08,0x08,0x7f,0x00,0x00,0x00}, // 4
 |  | ||||||
| 	{0x6f,0x49,0x49,0x7b,0x00,0x00,0x00}, // 5
 |  | ||||||
| 	{0x7f,0x49,0x49,0x7b,0x00,0x00,0x00}, // 6
 |  | ||||||
| 	{0x03,0x01,0x01,0x7f,0x00,0x00,0x00}, // 7
 |  | ||||||
| 	{0x7f,0x49,0x49,0x7f,0x00,0x00,0x00}, // 8
 |  | ||||||
| 	{0x0f,0x09,0x09,0x7f,0x00,0x00,0x00}, // 9
 |  | ||||||
| 	{0x22,0x00,0x00,0x00,0x00,0x00,0x00}, // :
 |  | ||||||
| 	{0xc1,0x00,0x00,0x00,0x00,0x00,0x00}, // ;
 |  | ||||||
| 	{0x08,0x14,0x22,0x00,0x00,0x00,0x00}, // <
 |  | ||||||
| 	{0x14,0x14,0x14,0x14,0x00,0x00,0x00}, // =
 |  | ||||||
| 	{0x22,0x14,0x08,0x00,0x00,0x00,0x00}, // >
 |  | ||||||
| 	{0x03,0x59,0x09,0x0f,0x00,0x00,0x00}, // ?
 |  | ||||||
| 	{0x7f,0x41,0x5d,0x55,0x5f,0x00,0x00}, // @
 |  | ||||||
| 	{0x7f,0x09,0x09,0x7f,0x00,0x00,0x00}, // A
 |  | ||||||
| 	{0x7f,0x49,0x49,0x77,0x00,0x00,0x00}, // B
 |  | ||||||
| 	{0x7f,0x41,0x41,0x63,0x00,0x00,0x00}, // C
 |  | ||||||
| 	{0x7f,0x41,0x41,0x3e,0x00,0x00,0x00}, // D
 |  | ||||||
| 	{0x7f,0x49,0x49,0x63,0x00,0x00,0x00}, // E
 |  | ||||||
| 	{0x7f,0x09,0x09,0x03,0x00,0x00,0x00}, // F
 |  | ||||||
| 	{0x7f,0x41,0x49,0x7b,0x00,0x00,0x00}, // G
 |  | ||||||
| 	{0x7f,0x08,0x08,0x7f,0x00,0x00,0x00}, // H
 |  | ||||||
| 	{0x41,0x7f,0x41,0x00,0x00,0x00,0x00}, // I
 |  | ||||||
| 	{0x60,0x40,0x40,0x7f,0x00,0x00,0x00}, // J
 |  | ||||||
| 	{0x7f,0x08,0x08,0x77,0x00,0x00,0x00}, // K
 |  | ||||||
| 	{0x7f,0x40,0x40,0x60,0x00,0x00,0x00}, // L
 |  | ||||||
| 	{0x7f,0x01,0x01,0x7f,0x01,0x01,0x7f}, // M
 |  | ||||||
| 	{0x7f,0x04,0x08,0x10,0x7f,0x00,0x00}, // N
 |  | ||||||
| 	{0x7f,0x41,0x41,0x7f,0x00,0x00,0x00}, // O
 |  | ||||||
| 	{0x7f,0x09,0x09,0x0f,0x00,0x00,0x00}, // P
 |  | ||||||
| 	{0x7f,0x41,0xc1,0x7f,0x00,0x00,0x00}, // Q
 |  | ||||||
| 	{0x7f,0x09,0x09,0x77,0x00,0x00,0x00}, // R
 |  | ||||||
| 	{0x6f,0x49,0x49,0x7b,0x00,0x00,0x00}, // S
 |  | ||||||
| 	{0x01,0x01,0x7f,0x01,0x01,0x00,0x00}, // T
 |  | ||||||
| 	{0x7f,0x40,0x40,0x7f,0x00,0x00,0x00}, // U
 |  | ||||||
| 	{0x7f,0x20,0x10,0x0f,0x00,0x00,0x00}, // V
 |  | ||||||
| 	{0x7f,0x40,0x40,0x7f,0x40,0x40,0x7f}, // W
 |  | ||||||
| 	{0x77,0x08,0x08,0x77,0x00,0x00,0x00}, // X
 |  | ||||||
| 	{0x6f,0x48,0x48,0x7f,0x00,0x00,0x00}, // Y
 |  | ||||||
| 	{0x71,0x49,0x49,0x47,0x00,0x00,0x00}, // Z
 |  | ||||||
| 	{0x7f,0x41,0x00,0x00,0x00,0x00,0x00}, // [
 |  | ||||||
| 	{0x03,0x04,0x08,0x10,0x60,0x00,0x00}, // "\"
 |  | ||||||
| 	{0x41,0x7f,0x00,0x00,0x00,0x00,0x00}, // ]
 |  | ||||||
| 	{0x04,0x02,0x01,0x02,0x04,0x00,0x00}, // ^
 |  | ||||||
| 	{0x80,0x80,0x80,0x80,0x00,0x00,0x00}, // _
 |  | ||||||
| 	{0x03,0x00,0x00,0x00,0x00,0x00,0x00}, // `
 |  | ||||||
| 	{0x74,0x54,0x54,0x7c,0x00,0x00,0x00}, // a
 |  | ||||||
| 	{0x7f,0x44,0x44,0x7c,0x00,0x00,0x00}, // b
 |  | ||||||
| 	{0x7c,0x44,0x44,0x6c,0x00,0x00,0x00}, // c
 |  | ||||||
| 	{0x7c,0x44,0x44,0x7f,0x00,0x00,0x00}, // d
 |  | ||||||
| 	{0x7c,0x54,0x54,0x5c,0x00,0x00,0x00}, // e
 |  | ||||||
| 	{0x04,0x7e,0x05,0x01,0x00,0x00,0x00}, // f
 |  | ||||||
| 	{0xbc,0xa4,0xa4,0xfc,0x00,0x00,0x00}, // g
 |  | ||||||
| 	{0x7f,0x04,0x04,0x7c,0x00,0x00,0x00}, // h
 |  | ||||||
| 	{0x7d,0x00,0x00,0x00,0x00,0x00,0x00}, // i
 |  | ||||||
| 	{0x80,0xfd,0x00,0x00,0x00,0x00,0x00}, // j
 |  | ||||||
| 	{0x7f,0x04,0x04,0x7a,0x00,0x00,0x00}, // k
 |  | ||||||
| 	{0x7f,0x00,0x00,0x00,0x00,0x00,0x00}, // l
 |  | ||||||
| 	{0x7c,0x04,0x04,0x7c,0x04,0x04,0x7c}, // m
 |  | ||||||
| 	{0x7c,0x04,0x04,0x7c,0x00,0x00,0x00}, // n
 |  | ||||||
| 	{0x7c,0x44,0x44,0x7c,0x00,0x00,0x00}, // o
 |  | ||||||
| 	{0xfc,0x44,0x44,0x7c,0x00,0x00,0x00}, // p
 |  | ||||||
| 	{0x7c,0x44,0x44,0xfc,0x00,0x00,0x00}, // q
 |  | ||||||
| 	{0x7c,0x04,0x04,0x0c,0x00,0x00,0x00}, // r
 |  | ||||||
| 	{0x5c,0x54,0x54,0x74,0x00,0x00,0x00}, // s
 |  | ||||||
| 	{0x7f,0x44,0x44,0x60,0x00,0x00,0x00}, // t
 |  | ||||||
| 	{0x7c,0x40,0x40,0x7c,0x00,0x00,0x00}, // u
 |  | ||||||
| 	{0x7c,0x20,0x10,0x0c,0x00,0x00,0x00}, // v
 |  | ||||||
| 	{0x7c,0x40,0x40,0x7c,0x40,0x40,0x7c}, // w
 |  | ||||||
| 	{0x6c,0x10,0x10,0x6c,0x00,0x00,0x00}, // x
 |  | ||||||
| 	{0xbc,0xa0,0xa0,0xfc,0x00,0x00,0x00}, // y
 |  | ||||||
| 	{0x64,0x54,0x54,0x4c,0x00,0x00,0x00}, // z
 |  | ||||||
| 	{0x08,0x3e,0x41,0x00,0x00,0x00,0x00}, // {
 |  | ||||||
| 	{0xff,0x00,0x00,0x00,0x00,0x00,0x00}, // |
 |  | ||||||
| 	{0x41,0x3e,0x08,0x00,0x00,0x00,0x00}, // }
 |  | ||||||
| 	{0x1c,0x04,0x1c,0x10,0x1c,0x00,0x00}, // ~
 |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x7d,0x44,0x44,0x7d,0x00,0x00,0x00}, // o
 |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |  | ||||||
| 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| @ -0,0 +1,437 @@ | |||||||
|  | /* Hello World Example
 | ||||||
|  | 
 | ||||||
|  |    This example code is in the Public Domain (or CC0 licensed, at your option.) | ||||||
|  | 
 | ||||||
|  |    Unless required by applicable law or agreed to in writing, this | ||||||
|  |    software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR | ||||||
|  |    CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | */ | ||||||
|  | #include <stdio.h> | ||||||
|  | #include "sdkconfig.h" | ||||||
|  | #include "freertos/FreeRTOS.h" | ||||||
|  | #include "freertos/task.h" | ||||||
|  | #include "esp_system.h" | ||||||
|  | #include "esp_spi_flash.h" | ||||||
|  | 
 | ||||||
|  | #include "driver/gpio.h" | ||||||
|  | #include "esp_http_client.h" | ||||||
|  | #include "esp_wifi.h" | ||||||
|  | #include "esp_netif.h" | ||||||
|  | #include "esp_eth.h" | ||||||
|  | 
 | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <string.h> | ||||||
|  | 
 | ||||||
|  | #include "esp_wifi.h" | ||||||
|  | #include "esp_event.h" | ||||||
|  | #include "esp_log.h" | ||||||
|  | #include "esp_system.h" | ||||||
|  | #include "esp_spiffs.h" | ||||||
|  | #include <esp_http_server.h> | ||||||
|  | #include <nvs_flash.h> | ||||||
|  | 
 | ||||||
|  | #include "freertos/FreeRTOS.h" | ||||||
|  | #include "freertos/task.h" | ||||||
|  | #include "freertos/event_groups.h" | ||||||
|  | #include "freertos/queue.h" | ||||||
|  | 
 | ||||||
|  | #include "driver/gpio.h" | ||||||
|  | #include "driver/ledc.h" | ||||||
|  | 
 | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <string.h> | ||||||
|  | 
 | ||||||
|  | #include <sys/param.h> | ||||||
|  | 
 | ||||||
|  | #include "esp_netif.h" | ||||||
|  | #include "esp_eth.h" | ||||||
|  | #include <cJSON.h> | ||||||
|  | 
 | ||||||
|  | #define WIFI_SSID "ags-iot" | ||||||
|  | #define WIFI_PASS "internetOfClocksAndCoffee" | ||||||
|  | //#define WIFI_SSID "AndroidAP_3324"
 | ||||||
|  | //#define WIFI_PASS "Hella1234"
 | ||||||
|  | 
 | ||||||
|  | char http_output_buffer[98304]; | ||||||
|  | uint32_t buffer_pointer = 0; | ||||||
|  | 
 | ||||||
|  | // Event group
 | ||||||
|  | static EventGroupHandle_t wifi_event_group; | ||||||
|  | const int CONNECTED_BIT = BIT0; | ||||||
|  | static xQueueHandle gpio_evt_queue = NULL; | ||||||
|  | 
 | ||||||
|  | #ifdef CONFIG_IDF_TARGET_ESP32 | ||||||
|  | #define CHIP_NAME "ESP32" | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #ifdef CONFIG_IDF_TARGET_ESP32S2BETA | ||||||
|  | #define CHIP_NAME "ESP32-S2 Beta" | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #define GPIO_R1 25 | ||||||
|  | #define GPIO_G1 26 | ||||||
|  | #define GPIO_B1 27 | ||||||
|  | #define GPIO_R2 14 | ||||||
|  | #define GPIO_G2 12 | ||||||
|  | #define GPIO_B2 13 | ||||||
|  | 
 | ||||||
|  | #define GPIO_CLK 16 | ||||||
|  | #define GPIO_OE  15 | ||||||
|  | #define GPIO_LAT 4 | ||||||
|  | 
 | ||||||
|  | #define GPIO_A 23 | ||||||
|  | #define GPIO_B 19 | ||||||
|  | #define GPIO_C 5 | ||||||
|  | #define GPIO_D 17 | ||||||
|  | #define GPIO_E 18 | ||||||
|  | 
 | ||||||
|  | uint8_t fb[64][128][3]; | ||||||
|  | 
 | ||||||
|  | const unsigned char font[96][7] = { | ||||||
|  | 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, //  
 | ||||||
|  | 	{0x5f,0x00,0x00,0x00,0x00,0x00,0x00}, // !
 | ||||||
|  | 	{0x03,0x00,0x03,0x00,0x00,0x00,0x00}, // "
 | ||||||
|  | 	{0x14,0x7f,0x14,0x7f,0x14,0x00,0x00}, // #
 | ||||||
|  | 	{0x6f,0x49,0xc9,0x7b,0x00,0x00,0x00}, // $
 | ||||||
|  | 	{0x63,0x13,0x08,0x64,0x63,0x00,0x00}, // %
 | ||||||
|  | 	{0x7f,0xc9,0x49,0x63,0x00,0x00,0x00}, // &
 | ||||||
|  | 	{0x03,0x00,0x00,0x00,0x00,0x00,0x00}, // '
 | ||||||
|  | 	{0x3e,0x41,0x00,0x00,0x00,0x00,0x00}, // (
 | ||||||
|  | 	{0x41,0x3e,0x00,0x00,0x00,0x00,0x00}, // )
 | ||||||
|  | 	{0x0a,0x04,0x1f,0x04,0x0a,0x00,0x00}, // *
 | ||||||
|  | 	{0x08,0x08,0x3e,0x08,0x08,0x00,0x00}, // +
 | ||||||
|  | 	{0xc0,0x00,0x00,0x00,0x00,0x00,0x00}, // ,
 | ||||||
|  | 	{0x08,0x08,0x08,0x08,0x00,0x00,0x00}, // -
 | ||||||
|  | 	{0x40,0x00,0x00,0x00,0x00,0x00,0x00}, // .
 | ||||||
|  | 	{0x60,0x10,0x08,0x04,0x03,0x00,0x00}, // /
 | ||||||
|  | 	{0x7f,0x41,0x41,0x7f,0x00,0x00,0x00}, // 0
 | ||||||
|  | 	{0x01,0x7f,0x00,0x00,0x00,0x00,0x00}, // 1
 | ||||||
|  | 	{0x7b,0x49,0x49,0x6f,0x00,0x00,0x00}, // 2
 | ||||||
|  | 	{0x63,0x49,0x49,0x7f,0x00,0x00,0x00}, // 3
 | ||||||
|  | 	{0x0f,0x08,0x08,0x7f,0x00,0x00,0x00}, // 4
 | ||||||
|  | 	{0x6f,0x49,0x49,0x7b,0x00,0x00,0x00}, // 5
 | ||||||
|  | 	{0x7f,0x49,0x49,0x7b,0x00,0x00,0x00}, // 6
 | ||||||
|  | 	{0x03,0x01,0x01,0x7f,0x00,0x00,0x00}, // 7
 | ||||||
|  | 	{0x7f,0x49,0x49,0x7f,0x00,0x00,0x00}, // 8
 | ||||||
|  | 	{0x0f,0x09,0x09,0x7f,0x00,0x00,0x00}, // 9
 | ||||||
|  | 	{0x41,0x00,0x00,0x00,0x00,0x00,0x00}, // :
 | ||||||
|  | 	{0xc1,0x00,0x00,0x00,0x00,0x00,0x00}, // ;
 | ||||||
|  | 	{0x08,0x14,0x22,0x00,0x00,0x00,0x00}, // <
 | ||||||
|  | 	{0x14,0x14,0x14,0x14,0x00,0x00,0x00}, // =
 | ||||||
|  | 	{0x22,0x14,0x08,0x00,0x00,0x00,0x00}, // >
 | ||||||
|  | 	{0x03,0x59,0x09,0x0f,0x00,0x00,0x00}, // ?
 | ||||||
|  | 	{0x7f,0x41,0x5d,0x55,0x5f,0x00,0x00}, // @
 | ||||||
|  | 	{0x7f,0x09,0x09,0x7f,0x00,0x00,0x00}, // A
 | ||||||
|  | 	{0x7f,0x49,0x49,0x77,0x00,0x00,0x00}, // B
 | ||||||
|  | 	{0x7f,0x41,0x41,0x63,0x00,0x00,0x00}, // C
 | ||||||
|  | 	{0x7f,0x41,0x41,0x3e,0x00,0x00,0x00}, // D
 | ||||||
|  | 	{0x7f,0x49,0x49,0x63,0x00,0x00,0x00}, // E
 | ||||||
|  | 	{0x7f,0x09,0x09,0x03,0x00,0x00,0x00}, // F
 | ||||||
|  | 	{0x7f,0x41,0x49,0x7b,0x00,0x00,0x00}, // G
 | ||||||
|  | 	{0x7f,0x08,0x08,0x7f,0x00,0x00,0x00}, // H
 | ||||||
|  | 	{0x41,0x7f,0x41,0x00,0x00,0x00,0x00}, // I
 | ||||||
|  | 	{0x60,0x40,0x40,0x7f,0x00,0x00,0x00}, // J
 | ||||||
|  | 	{0x7f,0x08,0x08,0x77,0x00,0x00,0x00}, // K
 | ||||||
|  | 	{0x7f,0x40,0x40,0x60,0x00,0x00,0x00}, // L
 | ||||||
|  | 	{0x7f,0x01,0x01,0x7f,0x01,0x01,0x7f}, // M
 | ||||||
|  | 	{0x7f,0x01,0x01,0x7f,0x00,0x00,0x00}, // N
 | ||||||
|  | 	{0x7f,0x41,0x41,0x7f,0x00,0x00,0x00}, // O
 | ||||||
|  | 	{0x7f,0x09,0x09,0x0f,0x00,0x00,0x00}, // P
 | ||||||
|  | 	{0x7f,0x41,0xc1,0x7f,0x00,0x00,0x00}, // Q
 | ||||||
|  | 	{0x7f,0x09,0x09,0x77,0x00,0x00,0x00}, // R
 | ||||||
|  | 	{0x6f,0x49,0x49,0x7b,0x00,0x00,0x00}, // S
 | ||||||
|  | 	{0x01,0x01,0x7f,0x01,0x01,0x00,0x00}, // T
 | ||||||
|  | 	{0x7f,0x40,0x40,0x7f,0x00,0x00,0x00}, // U
 | ||||||
|  | 	{0x7f,0x20,0x10,0x0f,0x00,0x00,0x00}, // V
 | ||||||
|  | 	{0x7f,0x40,0x40,0x7f,0x40,0x40,0x7f}, // W
 | ||||||
|  | 	{0x77,0x08,0x08,0x77,0x00,0x00,0x00}, // X
 | ||||||
|  | 	{0x6f,0x48,0x48,0x7f,0x00,0x00,0x00}, // Y
 | ||||||
|  | 	{0x71,0x49,0x49,0x47,0x00,0x00,0x00}, // Z
 | ||||||
|  | 	{0x7f,0x41,0x00,0x00,0x00,0x00,0x00}, // [
 | ||||||
|  | 	{0x03,0x04,0x08,0x10,0x60,0x00,0x00}, // "\"
 | ||||||
|  | 	{0x41,0x7f,0x00,0x00,0x00,0x00,0x00}, // ]
 | ||||||
|  | 	{0x04,0x02,0x01,0x02,0x04,0x00,0x00}, // ^
 | ||||||
|  | 	{0x80,0x80,0x80,0x80,0x00,0x00,0x00}, // _
 | ||||||
|  | 	{0x03,0x00,0x00,0x00,0x00,0x00,0x00}, // `
 | ||||||
|  | 	{0x74,0x54,0x54,0x7c,0x00,0x00,0x00}, // a
 | ||||||
|  | 	{0x7f,0x44,0x44,0x7c,0x00,0x00,0x00}, // b
 | ||||||
|  | 	{0x7c,0x44,0x44,0x6c,0x00,0x00,0x00}, // c
 | ||||||
|  | 	{0x7c,0x44,0x44,0x7f,0x00,0x00,0x00}, // d
 | ||||||
|  | 	{0x7c,0x54,0x54,0x5c,0x00,0x00,0x00}, // e
 | ||||||
|  | 	{0x7f,0x05,0x05,0x01,0x00,0x00,0x00}, // f
 | ||||||
|  | 	{0xbc,0xa4,0xa4,0xfc,0x00,0x00,0x00}, // g
 | ||||||
|  | 	{0x7f,0x04,0x04,0x7c,0x00,0x00,0x00}, // h
 | ||||||
|  | 	{0x7d,0x00,0x00,0x00,0x00,0x00,0x00}, // i
 | ||||||
|  | 	{0x80,0xfd,0x00,0x00,0x00,0x00,0x00}, // j
 | ||||||
|  | 	{0x7f,0x04,0x04,0x7a,0x00,0x00,0x00}, // k
 | ||||||
|  | 	{0x7f,0x00,0x00,0x00,0x00,0x00,0x00}, // l
 | ||||||
|  | 	{0x7c,0x04,0x04,0x7c,0x04,0x04,0x7c}, // m
 | ||||||
|  | 	{0x7c,0x04,0x04,0x7c,0x00,0x00,0x00}, // n
 | ||||||
|  | 	{0x7c,0x44,0x44,0x7c,0x00,0x00,0x00}, // o
 | ||||||
|  | 	{0xfc,0x44,0x44,0x7c,0x00,0x00,0x00}, // p
 | ||||||
|  | 	{0x7c,0x44,0x44,0xfc,0x00,0x00,0x00}, // q
 | ||||||
|  | 	{0x7c,0x04,0x04,0x0c,0x00,0x00,0x00}, // r
 | ||||||
|  | 	{0x5c,0x54,0x54,0x74,0x00,0x00,0x00}, // s
 | ||||||
|  | 	{0x7f,0x44,0x44,0x60,0x00,0x00,0x00}, // t
 | ||||||
|  | 	{0x7c,0x40,0x40,0x7c,0x00,0x00,0x00}, // u
 | ||||||
|  | 	{0x7c,0x20,0x10,0x0c,0x00,0x00,0x00}, // v
 | ||||||
|  | 	{0x7c,0x40,0x40,0x7c,0x40,0x40,0x7c}, // w
 | ||||||
|  | 	{0x6c,0x10,0x10,0x6c,0x00,0x00,0x00}, // x
 | ||||||
|  | 	{0xbc,0xa0,0xa0,0xfc,0x00,0x00,0x00}, // y
 | ||||||
|  | 	{0x64,0x54,0x54,0x4c,0x00,0x00,0x00}, // z
 | ||||||
|  | 	{0x08,0x3e,0x41,0x00,0x00,0x00,0x00}, // {
 | ||||||
|  | 	{0xff,0x00,0x00,0x00,0x00,0x00,0x00}, // |
 | ||||||
|  | 	{0x41,0x3e,0x08,0x00,0x00,0x00,0x00}, // }
 | ||||||
|  | 	{0x1c,0x04,0x1c,0x10,0x1c,0x00,0x00}, // ~
 | ||||||
|  | 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00} | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | void connect_to_wifi(char* new_ssid, char* new_psk){ | ||||||
|  |     printf("ssid: \'%s\'\n", new_ssid); | ||||||
|  |     printf("psk:\'%s\'\n", new_psk); | ||||||
|  | 
 | ||||||
|  |     ESP_ERROR_CHECK(esp_wifi_stop()); | ||||||
|  | 
 | ||||||
|  |     wifi_init_config_t wifi_init_config = WIFI_INIT_CONFIG_DEFAULT(); | ||||||
|  | 	ESP_ERROR_CHECK(esp_wifi_init(&wifi_init_config)); | ||||||
|  | 	ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM)); | ||||||
|  | 	ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); | ||||||
|  | 
 | ||||||
|  | 	// configure the wifi connection and start the interface
 | ||||||
|  | 	wifi_config_t wifi_config = { | ||||||
|  |         .sta = { | ||||||
|  |             .ssid = {*new_ssid}, | ||||||
|  |             .password = {*new_psk} | ||||||
|  |         } | ||||||
|  |     }; | ||||||
|  |     strcpy(&(wifi_config.sta.ssid), new_ssid); | ||||||
|  |     strcpy(&(wifi_config.sta.password), new_psk); | ||||||
|  | 
 | ||||||
|  |     printf("ssid: \'%s\'\n", wifi_config.sta.ssid); | ||||||
|  |     printf("psk: \'%s\'\n", wifi_config.sta.password); | ||||||
|  | 
 | ||||||
|  | 	ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config)); | ||||||
|  |     ESP_ERROR_CHECK(esp_wifi_start()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Wifi event handler
 | ||||||
|  | static esp_err_t event_handler(void *ctx, system_event_t *event) | ||||||
|  | { | ||||||
|  |     switch(event->event_id) { | ||||||
|  | 		 | ||||||
|  |     case SYSTEM_EVENT_STA_START: | ||||||
|  |         esp_wifi_connect(); | ||||||
|  |         break; | ||||||
|  |      | ||||||
|  | 	case SYSTEM_EVENT_STA_GOT_IP: | ||||||
|  |         xEventGroupSetBits(wifi_event_group, CONNECTED_BIT); | ||||||
|  |         break; | ||||||
|  |      | ||||||
|  | 	case SYSTEM_EVENT_STA_DISCONNECTED: | ||||||
|  | 		xEventGroupClearBits(wifi_event_group, CONNECTED_BIT); | ||||||
|  |         printf("disconnected!\n"); | ||||||
|  |         break; | ||||||
|  |      | ||||||
|  | 	default: | ||||||
|  |         break; | ||||||
|  |     } | ||||||
|  |     | ||||||
|  | 	return ESP_OK; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #define TAG "test"  | ||||||
|  | esp_err_t _http_event_handle(esp_http_client_event_t *evt) | ||||||
|  | { | ||||||
|  |     switch(evt->event_id) { | ||||||
|  |         case HTTP_EVENT_ERROR: | ||||||
|  |             ESP_LOGI(TAG, "HTTP_EVENT_ERROR"); | ||||||
|  |             break; | ||||||
|  |         case HTTP_EVENT_ON_CONNECTED: | ||||||
|  |             ESP_LOGI(TAG, "HTTP_EVENT_ON_CONNECTED"); | ||||||
|  |             buffer_pointer = 0; | ||||||
|  |             break; | ||||||
|  |         case HTTP_EVENT_HEADER_SENT: | ||||||
|  |             ESP_LOGI(TAG, "HTTP_EVENT_HEADER_SENT"); | ||||||
|  |             break; | ||||||
|  |         case HTTP_EVENT_ON_HEADER: | ||||||
|  |             ESP_LOGI(TAG, "HTTP_EVENT_ON_HEADER"); | ||||||
|  |             printf("%.*s", evt->data_len, (char*)evt->data); | ||||||
|  |             break; | ||||||
|  |         case HTTP_EVENT_ON_DATA: | ||||||
|  |             ESP_LOGI(TAG, "HTTP_EVENT_ON_DATA, len=%d", evt->data_len); | ||||||
|  |             if (!esp_http_client_is_chunked_response(evt->client)) { | ||||||
|  |                 memcpy(&http_output_buffer[buffer_pointer], evt->data, evt->data_len); | ||||||
|  |                 buffer_pointer += evt->data_len; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             break; | ||||||
|  |         case HTTP_EVENT_ON_FINISH: | ||||||
|  |             ESP_LOGI(TAG, "HTTP_EVENT_ON_FINISH"); | ||||||
|  |             http_output_buffer[buffer_pointer+1] = 0; | ||||||
|  |             //printf("%s", http_output_buffer);
 | ||||||
|  |             printf("PRINTING RECIEVED STRING:\n"); | ||||||
|  |             printf("%.*s\n", buffer_pointer, http_output_buffer); | ||||||
|  |             printf("END OF RECIEVED STRING\n"); | ||||||
|  |             cJSON *root = cJSON_Parse(http_output_buffer); | ||||||
|  |             const char *error_ptr = cJSON_GetErrorPtr();  | ||||||
|  |             //printf("error: %s\n", error_ptr-100);
 | ||||||
|  |             //printf("%s", cJSON_Print(root));
 | ||||||
|  |             printf("size is: %d\n", buffer_pointer); | ||||||
|  |             if(root != NULL) { | ||||||
|  |                 cJSON* departureListObject = cJSON_GetObjectItem(root, "departureList"); | ||||||
|  |                 if(departureListObject != NULL) { | ||||||
|  |                     cJSON* departureListObject = cJSON_GetObjectItem(root, "departureList"); | ||||||
|  |                     printf("%s", cJSON_Print(departureListObject)); | ||||||
|  |                 } | ||||||
|  |                 else | ||||||
|  |                     printf("dl empty\n"); | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |                 printf("root empty\n"); | ||||||
|  | 
 | ||||||
|  |             break; | ||||||
|  |         case HTTP_EVENT_DISCONNECTED: | ||||||
|  |             ESP_LOGI(TAG, "HTTP_EVENT_DISCONNECTED"); | ||||||
|  |             break; | ||||||
|  |     } | ||||||
|  |     return ESP_OK; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void write_bits(uint8_t r1, uint8_t g1, uint8_t b1, uint8_t r2, uint8_t g2, uint8_t b2){ | ||||||
|  |     gpio_set_level(GPIO_R1, r1);   | ||||||
|  |     gpio_set_level(GPIO_G1, g1); | ||||||
|  |     gpio_set_level(GPIO_B1, b1); | ||||||
|  |     gpio_set_level(GPIO_R2, r2); | ||||||
|  |     gpio_set_level(GPIO_G2, g2); | ||||||
|  |     gpio_set_level(GPIO_B2, b2); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void write_address(uint8_t addr){ | ||||||
|  |     gpio_set_level(GPIO_A, addr&0x01); | ||||||
|  |     gpio_set_level(GPIO_B, (addr&0x02)>>1); | ||||||
|  |     gpio_set_level(GPIO_C, (addr&0x04)>>2); | ||||||
|  |     gpio_set_level(GPIO_D, (addr&0x08)>>3); | ||||||
|  |     gpio_set_level(GPIO_E, (addr&0x10)>>4); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void put_chr(uint8_t line, uint8_t pos, uint8_t chr[]){ | ||||||
|  |     for(int i=0;i<8;i++) | ||||||
|  |         for(int j=0;j<7;j++) | ||||||
|  |             fb[1+(line*10)+i][(pos*7)+j][0] = (chr[j]&(1<<i))>>i; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void put_line(uint8_t line, char *str){ | ||||||
|  |     uint8_t pos = 0; | ||||||
|  |     while(str[pos] != 0){ | ||||||
|  |         put_chr(line, pos, font[str[pos]-0x20]); | ||||||
|  |         pos++; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void latch(){ | ||||||
|  |     gpio_set_level(GPIO_LAT, 0); | ||||||
|  |     gpio_set_level(GPIO_LAT, 1); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void clock_cycle(){ | ||||||
|  |     gpio_set_level(GPIO_CLK, 1); | ||||||
|  |     gpio_set_level(GPIO_CLK, 0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void app_main(void) | ||||||
|  | { | ||||||
|  |     printf("Hello world!\n"); | ||||||
|  | 
 | ||||||
|  | 	ESP_ERROR_CHECK(nvs_flash_init()); | ||||||
|  | 
 | ||||||
|  | 	wifi_event_group = xEventGroupCreate(); | ||||||
|  | 	tcpip_adapter_init(); | ||||||
|  | 	ESP_ERROR_CHECK(esp_event_loop_init(event_handler, NULL)); | ||||||
|  | 
 | ||||||
|  |     printf("1!\n"); | ||||||
|  | 	wifi_init_config_t wifi_init_config = WIFI_INIT_CONFIG_DEFAULT(); | ||||||
|  | 	ESP_ERROR_CHECK(esp_wifi_init(&wifi_init_config)); | ||||||
|  | 	ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM)); | ||||||
|  | 	ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); | ||||||
|  |     printf("2!\n"); | ||||||
|  | 	wifi_config_t wifi_config = { | ||||||
|  |         .sta = { | ||||||
|  |             .ssid = WIFI_SSID, | ||||||
|  |             .password = WIFI_PASS, | ||||||
|  |         }, | ||||||
|  |     }; | ||||||
|  | 	ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config)); | ||||||
|  |     ESP_ERROR_CHECK(esp_wifi_start()); | ||||||
|  | 	printf("Connecting to %s\n", WIFI_SSID); | ||||||
|  |     EventBits_t uxBits; | ||||||
|  | 	uxBits = xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT, false, true, 5000 / portTICK_PERIOD_MS); | ||||||
|  |     printf("3!\n"); | ||||||
|  |     if( ( uxBits & CONNECTED_BIT ) != 0 ) | ||||||
|  |     { | ||||||
|  |         printf("Connected!\n"); | ||||||
|  |     } | ||||||
|  |     else{ | ||||||
|  |         printf("Not connected!\n"); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  | //    put_line(0, "429 Amalienplatz");
 | ||||||
|  | //    put_line(1, "0123abcd");
 | ||||||
|  | //    put_line(2, "ags");
 | ||||||
|  |     put_line(0, "Wissenschaftliche"); | ||||||
|  |     put_line(1, "Arbeitsgemein-"); | ||||||
|  |     put_line(2, "schaft für Studio-"); | ||||||
|  |     put_line(3, "und Senderfragen"); | ||||||
|  |     put_line(4, "an der"); | ||||||
|  |     put_line(5, "TU Braunschweig"); | ||||||
|  | 
 | ||||||
|  |     gpio_config_t io_conf; | ||||||
|  |     //disable interrupt
 | ||||||
|  |     io_conf.intr_type = GPIO_INTR_DISABLE; | ||||||
|  |     //set as output mode
 | ||||||
|  |     io_conf.mode = GPIO_MODE_OUTPUT; | ||||||
|  |     //bit mask of the pins that you want to set,e.g.GPIO18/19
 | ||||||
|  |     io_conf.pin_bit_mask = | ||||||
|  |          (1ULL<<GPIO_LAT)|(1ULL<<GPIO_OE)|(1ULL<<GPIO_CLK) | ||||||
|  |         |(1ULL<<GPIO_R1)|(1ULL<<GPIO_G1)|(1ULL<<GPIO_B1)|(1ULL<<GPIO_R2)|(1ULL<<GPIO_G2)|(1ULL<<GPIO_B2) | ||||||
|  |         |(1ULL<<GPIO_A)|(1ULL<<GPIO_B)|(1ULL<<GPIO_C)|(1ULL<<GPIO_D)|(1ULL<<GPIO_E); | ||||||
|  |     //disable pull-down mode
 | ||||||
|  |     io_conf.pull_down_en = 0; | ||||||
|  |     //disable pull-up mode
 | ||||||
|  |     io_conf.pull_up_en = 0; | ||||||
|  |     //configure GPIO with the given settings
 | ||||||
|  |     gpio_config(&io_conf); | ||||||
|  | 
 | ||||||
|  |     esp_http_client_config_t config = { | ||||||
|  |         //.url = "https://bsvg.efa.de/bsvagstd/XML_DM_REQUEST?outputFormat=JSON&stateless=1&locationServerActive=1&type_dm=stop&name_dm=\"Saarplatz,Braunschweig\"&mode=direct&ptOptionsActive=1&useRealtime=1",
 | ||||||
|  |         .url = "http://mustbehax.de/web/bsvg.json", | ||||||
|  |         .event_handler = _http_event_handle, | ||||||
|  |     }; | ||||||
|  |     esp_http_client_handle_t client = esp_http_client_init(&config); | ||||||
|  |     esp_err_t err = esp_http_client_perform(client); | ||||||
|  | 
 | ||||||
|  |     if (err == ESP_OK) { | ||||||
|  |         ESP_LOGI(TAG, "Status = %d, content_length = %d", | ||||||
|  |                 esp_http_client_get_status_code(client), | ||||||
|  |                 esp_http_client_get_content_length(client)); | ||||||
|  |     } | ||||||
|  |     esp_http_client_cleanup(client); | ||||||
|  | 
 | ||||||
|  |     gpio_set_level(GPIO_OE, 1); | ||||||
|  |     gpio_set_level(GPIO_OE, 0); | ||||||
|  | 
 | ||||||
|  |     uint8_t line = 0; | ||||||
|  |     for (;;) { | ||||||
|  |         for(uint8_t i=0;i<128;i++){ | ||||||
|  |             write_bits(fb[line][i][0],fb[line][i][1],fb[line][i][2],fb[32+line][i][0],fb[32+line][i][1],fb[32+line][i][2]); | ||||||
|  |             //write_bits(1,1,1,1,1,1);
 | ||||||
|  |             clock_cycle(); | ||||||
|  |         } | ||||||
|  |         gpio_set_level(GPIO_OE, 1); | ||||||
|  |         latch(); | ||||||
|  |         write_address(line); | ||||||
|  |         gpio_set_level(GPIO_OE, 0); | ||||||
|  |         line = (line + 1)%32; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -1,81 +0,0 @@ | |||||||
| #include "http.h" |  | ||||||
| #include "esp_err.h" |  | ||||||
| #include "esp_log.h" |  | ||||||
| 
 |  | ||||||
| #include "lwip/err.h" |  | ||||||
| #include "lwip/sockets.h" |  | ||||||
| #include "lwip/sys.h" |  | ||||||
| #include "lwip/netdb.h" |  | ||||||
| #include "lwip/dns.h" |  | ||||||
| 
 |  | ||||||
| static const char *TAG = "http"; |  | ||||||
| 
 |  | ||||||
| static const char *REQUEST = "GET " WEB_PATH " HTTP/1.0\r\n" |  | ||||||
|     "Host: "WEB_SERVER":"WEB_PORT"\r\n" |  | ||||||
|     "User-Agent: esp-idf/1.0 esp32\r\n" |  | ||||||
|     "\r\n"; |  | ||||||
| 
 |  | ||||||
| esp_err_t http_request(char* buf) |  | ||||||
| { |  | ||||||
|     const struct addrinfo hints = { |  | ||||||
|         .ai_family = AF_INET, |  | ||||||
|         .ai_socktype = SOCK_STREAM, |  | ||||||
|     }; |  | ||||||
|     struct addrinfo *res; |  | ||||||
|     struct in_addr *addr; |  | ||||||
|     int s, r; |  | ||||||
| 
 |  | ||||||
|     int err = getaddrinfo(WEB_SERVER, WEB_PORT, &hints, &res); |  | ||||||
| 
 |  | ||||||
|     if(err != 0 || res == NULL) { |  | ||||||
|         ESP_LOGE(TAG, "DNS lookup failed err=%d res=%p", err, res); |  | ||||||
|         return ESP_ERR_NOT_FOUND; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /* Code to print the resolved IP.
 |  | ||||||
|      * Note: inet_ntoa is non-reentrant, look at ipaddr_ntoa_r for "real" code */ |  | ||||||
|     addr = &((struct sockaddr_in *)res->ai_addr)->sin_addr; |  | ||||||
|     ESP_LOGI(TAG, "DNS lookup succeeded. IP=%s", inet_ntoa(*addr)); |  | ||||||
| 
 |  | ||||||
|     s = socket(res->ai_family, res->ai_socktype, 0); |  | ||||||
|     if(s < 0) { |  | ||||||
|         ESP_LOGE(TAG, "... Failed to allocate socket."); |  | ||||||
|         freeaddrinfo(res); |  | ||||||
|         return -1; |  | ||||||
|     } |  | ||||||
|     ESP_LOGI(TAG, "... allocated socket"); |  | ||||||
| 
 |  | ||||||
|     if(connect(s, res->ai_addr, res->ai_addrlen) != 0) { |  | ||||||
|         ESP_LOGE(TAG, "... socket connect failed errno=%d", errno); |  | ||||||
|         close(s); |  | ||||||
|         freeaddrinfo(res); |  | ||||||
|         return -1; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     ESP_LOGI(TAG, "... connected"); |  | ||||||
|     freeaddrinfo(res); |  | ||||||
| 
 |  | ||||||
|     if (write(s, REQUEST, strlen(REQUEST)) < 0) { |  | ||||||
|         ESP_LOGE(TAG, "... socket send failed"); |  | ||||||
|         close(s); |  | ||||||
|         return -1; |  | ||||||
|     } |  | ||||||
|     ESP_LOGI(TAG, "... socket send success"); |  | ||||||
| 
 |  | ||||||
|     struct timeval receiving_timeout; |  | ||||||
|     receiving_timeout.tv_sec = 5; |  | ||||||
|     receiving_timeout.tv_usec = 0; |  | ||||||
|     if (setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &receiving_timeout, |  | ||||||
|                 sizeof(receiving_timeout)) < 0) { |  | ||||||
|         ESP_LOGE(TAG, "... failed to set socket receiving timeout"); |  | ||||||
|         close(s); |  | ||||||
|         return -1; |  | ||||||
|     } |  | ||||||
|     ESP_LOGI(TAG, "... set socket receiving timeout success"); |  | ||||||
| 
 |  | ||||||
|     /* Read HTTP response */ |  | ||||||
|     r = read(s, buf, RCV_BUFSIZE); |  | ||||||
|     if(r >= RCV_BUFSIZE) |  | ||||||
|         return -1; |  | ||||||
|     return 0; |  | ||||||
| } |  | ||||||
| @ -1,10 +0,0 @@ | |||||||
| #include "esp_system.h" |  | ||||||
| 
 |  | ||||||
| /* Constants that aren't configurable in menuconfig */ |  | ||||||
| #define WEB_SERVER "mustbehax.de" |  | ||||||
| #define WEB_PORT "80" |  | ||||||
| #define WEB_PATH "/test" |  | ||||||
| 
 |  | ||||||
| #define RCV_BUFSIZE 8000  |  | ||||||
| 
 |  | ||||||
| esp_err_t http_request(char* buf); |  | ||||||
| @ -1,124 +0,0 @@ | |||||||
| #include "esp_tls.h" |  | ||||||
| #include "esp_log.h" |  | ||||||
| #include <stddef.h> |  | ||||||
| #include <stdint.h> |  | ||||||
| #include <stdio.h> |  | ||||||
| #include <string.h> |  | ||||||
| #include "freertos/FreeRTOS.h" |  | ||||||
| 
 |  | ||||||
| #include "esp_crt_bundle.h" |  | ||||||
| 
 |  | ||||||
| static const char *TAG = "https"; |  | ||||||
| 
 |  | ||||||
| #define WEB_SERVER "bsvg.efa.de" |  | ||||||
| #define WEB_PORT "443" |  | ||||||
| #define WEB_URL "/bsvagstd/XML_DM_REQUEST?outputFormat=JSON&stateless=1&locationServerActive=1&type_dm=stop&name_dm=\"Kaiserstr,Braunschweig\"&mode=direct&ptOptionsActive=1&useRealtime=1" |  | ||||||
| //#define WEB_SERVER "mustbehax.de"
 |  | ||||||
| //#define WEB_PORT "443"
 |  | ||||||
| //#define WEB_URL "/web/reduced.json"
 |  | ||||||
| 
 |  | ||||||
| static const char REQUEST[] = "GET " WEB_URL " HTTP/1.1\r\n" |  | ||||||
|                              "Host: "WEB_SERVER"\r\n" |  | ||||||
|                              "User-Agent: esp-idf/1.0 esp32\r\n" |  | ||||||
|                              "\r\n"; |  | ||||||
| 
 |  | ||||||
| esp_err_t https_get_request_using_crt_bundle(char* buf, size_t bufsize) |  | ||||||
| { |  | ||||||
|     memset(buf, 0, bufsize); |  | ||||||
|     ESP_LOGI(TAG, "https_request using crt bundle"); |  | ||||||
|     esp_tls_cfg_t cfg = { |  | ||||||
|         .crt_bundle_attach = esp_crt_bundle_attach, |  | ||||||
|     }; |  | ||||||
|     //https_get_request(cfg, "https://"WEB_SERVER""WEB_URL, HOWSMYSSL_REQUEST);
 |  | ||||||
|     //char buf[47000];
 |  | ||||||
|     int ret, len; |  | ||||||
| 
 |  | ||||||
|     esp_tls_t *tls = esp_tls_init(); |  | ||||||
|     if (!tls) { |  | ||||||
|         ESP_LOGE(TAG, "Failed to allocate esp_tls handle!"); |  | ||||||
|         return -1; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if (esp_tls_conn_http_new_sync("https://"WEB_SERVER""WEB_URL, &cfg, tls) == 1) { |  | ||||||
|         ESP_LOGI(TAG, "Connection established..."); |  | ||||||
|     } else { |  | ||||||
|         ESP_LOGE(TAG, "Connection failed..."); |  | ||||||
|         int esp_tls_code = 0, esp_tls_flags = 0; |  | ||||||
|         esp_tls_error_handle_t tls_e = NULL; |  | ||||||
|         esp_tls_get_error_handle(tls, &tls_e); |  | ||||||
|         /* Try to get TLS stack level error and certificate failure flags, if any */ |  | ||||||
|         ret = esp_tls_get_and_clear_last_error(tls_e, &esp_tls_code, &esp_tls_flags); |  | ||||||
|         if (ret == ESP_OK) { |  | ||||||
|             ESP_LOGE(TAG, "TLS error = -0x%x, TLS flags = -0x%x", esp_tls_code, esp_tls_flags); |  | ||||||
|         } |  | ||||||
|         esp_tls_conn_destroy(tls); |  | ||||||
|         return -2; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| #ifdef CONFIG_EXAMPLE_CLIENT_SESSION_TICKETS |  | ||||||
|     /* The TLS session is successfully established, now saving the session ctx for reuse */ |  | ||||||
|     if (save_client_session) { |  | ||||||
|         esp_tls_free_client_session(tls_client_session); |  | ||||||
|         tls_client_session = esp_tls_get_client_session(tls); |  | ||||||
|     } |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
|     size_t written_bytes = 0; |  | ||||||
|     do { |  | ||||||
|         ret = esp_tls_conn_write(tls, |  | ||||||
|                                  REQUEST + written_bytes, |  | ||||||
|                                  strlen(REQUEST) - written_bytes); |  | ||||||
|         if (ret >= 0) { |  | ||||||
|             ESP_LOGI(TAG, "%d bytes written", ret); |  | ||||||
|             written_bytes += ret; |  | ||||||
|         } else if (ret != ESP_TLS_ERR_SSL_WANT_READ  && ret != ESP_TLS_ERR_SSL_WANT_WRITE) { |  | ||||||
|             ESP_LOGE(TAG, "esp_tls_conn_write  returned: [0x%02X](%s)", ret, esp_err_to_name(ret)); |  | ||||||
|             esp_tls_conn_destroy(tls); |  | ||||||
|             return -3; |  | ||||||
|         } |  | ||||||
|     } while (written_bytes < strlen(REQUEST)); |  | ||||||
| 
 |  | ||||||
|     uint32_t write_offset = 0; |  | ||||||
|     memset(buf, 0x00, bufsize); |  | ||||||
|     ESP_LOGI(TAG, "Reading HTTP response..."); |  | ||||||
|     do { |  | ||||||
|         len = bufsize - write_offset - 1; |  | ||||||
|         if(len > 6000) |  | ||||||
|             len = 6000; |  | ||||||
| 
 |  | ||||||
|         ret = esp_tls_conn_read(tls, &buf[write_offset], len); |  | ||||||
| 
 |  | ||||||
|         if (ret == ESP_TLS_ERR_SSL_WANT_WRITE  || ret == ESP_TLS_ERR_SSL_WANT_READ) { |  | ||||||
|             continue; |  | ||||||
|         } else if (ret < 0) { |  | ||||||
|             ESP_LOGE(TAG, "esp_tls_conn_read  returned [-0x%02X](%s)", -ret, esp_err_to_name(ret)); |  | ||||||
|             break; |  | ||||||
|         } else if (ret == 0) { |  | ||||||
|             ESP_LOGI(TAG, "connection closed"); |  | ||||||
|             break; |  | ||||||
|         } |  | ||||||
|         write_offset += ret; |  | ||||||
|         len = ret; |  | ||||||
|         ESP_LOGI(TAG, "%d bytes read", len); |  | ||||||
| 
 |  | ||||||
|         //if(!strstr(buf, "departureList")){
 |  | ||||||
|         //    ESP_LOGI(TAG,"tossing ... strstr: %ld", (uint32_t)strstr(buf, "departureList")); 
 |  | ||||||
|         //    write_offset=0;
 |  | ||||||
|         //}else
 |  | ||||||
|         //    ESP_LOGI(TAG,"keeping ... strstr: %ld", (uint32_t)strstr(buf, "departureList")); 
 |  | ||||||
| 
 |  | ||||||
|     } while (1); |  | ||||||
|     buf[write_offset+len+1] = 0; |  | ||||||
| 
 |  | ||||||
|     esp_tls_conn_destroy(tls); |  | ||||||
|     return 0; |  | ||||||
| 
 |  | ||||||
|     ///* Print response directly to stdout as it is read */
 |  | ||||||
|     //for (int i = 0; i < sizeof(buf); i++) {
 |  | ||||||
|     //    putchar(buf[i]);
 |  | ||||||
|     //    if(i%100 == 0)
 |  | ||||||
|     //        vTaskDelay(1);
 |  | ||||||
|     //}
 |  | ||||||
|     //putchar('\n'); // JSON output doesn't have a newline at end
 |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,4 +0,0 @@ | |||||||
| #include <stddef.h> |  | ||||||
| #include "esp_err.h" |  | ||||||
| 
 |  | ||||||
| esp_err_t https_get_request_using_crt_bundle(char* buf, size_t bufsize); |  | ||||||
| @ -1,221 +0,0 @@ | |||||||
| /* Hello World Example
 |  | ||||||
| 
 |  | ||||||
|    This example code is in the Public Domain (or CC0 licensed, at your option.) |  | ||||||
| 
 |  | ||||||
|    Unless required by applicable law or agreed to in writing, this |  | ||||||
|    software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR |  | ||||||
|    CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| */ |  | ||||||
| #include <stdint.h> |  | ||||||
| #include <stdio.h> |  | ||||||
| #include <string.h> |  | ||||||
| #include <strings.h> |  | ||||||
| #include <sys/types.h> |  | ||||||
| #include "sdkconfig.h" |  | ||||||
| #include "freertos/FreeRTOS.h" |  | ||||||
| #include "freertos/task.h" |  | ||||||
| #include "esp_system.h" |  | ||||||
| #include "esp_timer.h" |  | ||||||
| #include "esp_log.h" |  | ||||||
| 
 |  | ||||||
| #include "display.h" |  | ||||||
| #include "text.h" |  | ||||||
| #include "wlan.h" |  | ||||||
| #include "https.h" |  | ||||||
| 
 |  | ||||||
| #include "esp_heap_caps.h" |  | ||||||
| 
 |  | ||||||
| #include "lwjson/lwjson.h" |  | ||||||
| 
 |  | ||||||
| #ifdef CONFIG_IDF_TARGET_ESP32 |  | ||||||
| #define CHIP_NAME "ESP32" |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #ifdef CONFIG_IDF_TARGET_ESP32S2BETA |  | ||||||
| #define CHIP_NAME "ESP32-S2 Beta" |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| const esp_timer_create_args_t periodic_timer_args = { |  | ||||||
|     .callback = &display_cycle, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| uint8_t buf_ok = 0; |  | ||||||
| char bsvg_buf[40000]; |  | ||||||
| static void https_request_task(void *pvparameters){ |  | ||||||
|     while(https_get_request_using_crt_bundle(bsvg_buf, sizeof(bsvg_buf)) != 0){ |  | ||||||
|         ESP_LOGE("bsvg", "Failed to get data from server. Retrying..."); |  | ||||||
|         vTaskDelay(1); |  | ||||||
|     } |  | ||||||
|     buf_ok = 1; |  | ||||||
|     vTaskDelete(NULL); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void get_json_string(char* buf, char* name, char* dest){ |  | ||||||
|     char* element = strstr(buf, name); |  | ||||||
|     char *ptr= element; |  | ||||||
|     while(*ptr != ':' && *ptr != 0) ptr++; |  | ||||||
|     while(*ptr != '"' && *ptr != 0) ptr++; |  | ||||||
|     ptr++; |  | ||||||
| 
 |  | ||||||
|     char *end=ptr; |  | ||||||
|     while(*end != '"') end++; |  | ||||||
| 
 |  | ||||||
|     strncpy(dest, ptr, end-ptr); |  | ||||||
|     dest[end-ptr]=0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| uint8_t json_ok = 0; |  | ||||||
| static void json_parse_task(void *pvparameters){ |  | ||||||
|     //uint16_t start_ptr = 0;
 |  | ||||||
|     //while(buf[start_ptr] != '{' && start_ptr < sizeof(buf))
 |  | ||||||
|     //    start_ptr++;
 |  | ||||||
|     char *start = strstr(bsvg_buf, "\"departureList\"") + 17; |  | ||||||
|     //char *start = strstr(bsvg_buf, "{");
 |  | ||||||
|     ESP_LOGI("bsvg", "start at %ld: \"%.10s\"", (uint32_t)start, start); |  | ||||||
|     //departureList = cJSON_Parse(start);
 |  | ||||||
| 
 |  | ||||||
|     uint8_t line = 0; |  | ||||||
|     char *item = start; |  | ||||||
|     char txt[6][50]; |  | ||||||
|     while((item = strstr(item+1, "{ \"stopID\":")) != 0){ |  | ||||||
|         char symbol[10]; |  | ||||||
|         get_json_string(item, "symbol", symbol); |  | ||||||
| 
 |  | ||||||
|         char direction[50]; |  | ||||||
|         get_json_string(item, "direction", direction); |  | ||||||
| 
 |  | ||||||
|         char countdown[10] ; |  | ||||||
|         get_json_string(item, "countdown", countdown); |  | ||||||
| 
 |  | ||||||
|         if(atoi(countdown)>=60){ |  | ||||||
|             uint8_t h = atoi(countdown) / 60; |  | ||||||
|             uint8_t m = atoi(countdown) % 60; |  | ||||||
|             sprintf(countdown, "%d:%02d", h, m); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if(line < 6){ |  | ||||||
|             sprintf(txt[line], "                            %.4s", countdown); |  | ||||||
|             put_line(fb, line, txt[line], 1, 1); |  | ||||||
| 
 |  | ||||||
|             sprintf(txt[line], "     %.20s", direction); |  | ||||||
|             put_line(fb, line, txt[line], 1, 1); |  | ||||||
| 
 |  | ||||||
|             sprintf(txt[line], "%.3s", symbol); |  | ||||||
|             put_line(fb, line, txt[line], 1, 1); |  | ||||||
| 
 |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         //sprintf(txt[line], "%.3s\t%.20s\t%.4s", symbol, direction, countdown);
 |  | ||||||
|         printf("line = %d: %s\n", line, txt[line]); |  | ||||||
|         printf("\n"); |  | ||||||
| 
 |  | ||||||
|         line++; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     //lwjson_init(&lwjson, tokens, LWJSON_ARRAYSIZE(tokens));
 |  | ||||||
|     //if (lwjson_parse(&lwjson, start) == lwjsonOK) {
 |  | ||||||
|     //    const lwjson_token_t* t;
 |  | ||||||
|     //    printf("JSON parsed..\r\n");
 |  | ||||||
| 
 |  | ||||||
|     //    /* Find custom key in JSON */
 |  | ||||||
|     //    if ((t = lwjson_find(&lwjson, "stopID")) != NULL) {
 |  | ||||||
|     //        printf("Key found with data type: %d\r\n", (int)t->type);
 |  | ||||||
|     //    }
 |  | ||||||
| 
 |  | ||||||
|     //    /* Call this when not used anymore */
 |  | ||||||
|     //    lwjson_free(&lwjson);
 |  | ||||||
|     //}
 |  | ||||||
|     //else{
 |  | ||||||
|     //    ESP_LOGI("bsvg", "parse fail");
 |  | ||||||
|     //}
 |  | ||||||
| 
 |  | ||||||
|     json_ok = 1; |  | ||||||
|     vTaskDelete(NULL); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void app_main(void) |  | ||||||
| { |  | ||||||
|     printf("Hello world!\n"); |  | ||||||
|     printf("free heap: %d\n", heap_caps_get_free_size( MALLOC_CAP_DEFAULT) ); |  | ||||||
|     ESP_LOGI("bsvg", "display init");  |  | ||||||
|     display_init(); |  | ||||||
| 
 |  | ||||||
|     printf("free heap: %d\n", heap_caps_get_free_size( MALLOC_CAP_DEFAULT) ); |  | ||||||
|     esp_timer_handle_t periodic_timer; |  | ||||||
|     ESP_ERROR_CHECK(esp_timer_create(&periodic_timer_args, &periodic_timer)); |  | ||||||
|     ESP_ERROR_CHECK(esp_timer_start_periodic(periodic_timer, 500)); |  | ||||||
| 
 |  | ||||||
|     put_line(fb, 1, "Moin", 1, 1); |  | ||||||
| 
 |  | ||||||
|     wlan_init(); |  | ||||||
| 
 |  | ||||||
|     put_line(fb, 2, "wifi", 1, 1); |  | ||||||
| 
 |  | ||||||
|     for (;;) { |  | ||||||
|         printf("free heap: %d\n", heap_caps_get_free_size( MALLOC_CAP_DEFAULT) ); |  | ||||||
|         xTaskCreate(&https_request_task, "https_get_task", 8192, NULL, 5, NULL); |  | ||||||
|         while (!buf_ok) { |  | ||||||
|             vTaskDelay(1); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         printf("free heap: %d\n", heap_caps_get_free_size( MALLOC_CAP_DEFAULT) ); |  | ||||||
|         ESP_LOGI("bsvg", "got from https server:");  |  | ||||||
|         for(uint32_t i=0; i<sizeof(bsvg_buf); i++){ |  | ||||||
|             putchar(bsvg_buf[i]); |  | ||||||
|             if(i%1000==0) |  | ||||||
|                 vTaskDelay(1); |  | ||||||
|         } |  | ||||||
|         putchar('\n'); |  | ||||||
| 
 |  | ||||||
|         printf("free heap: %d\n", heap_caps_get_free_size( MALLOC_CAP_DEFAULT) ); |  | ||||||
|         put_line(fb, 3, "https", 1, 1); |  | ||||||
| 
 |  | ||||||
|         xTaskCreate(&json_parse_task, "json_parse_task", 8192, NULL, 5, NULL); |  | ||||||
|         ESP_LOGI("bsvg", "Parsing JSON...");  |  | ||||||
|         while (!json_ok) { |  | ||||||
|             printf("free heap: %d\n", heap_caps_get_free_size( MALLOC_CAP_DEFAULT) ); |  | ||||||
|             vTaskDelay(1); |  | ||||||
|         } |  | ||||||
|         ESP_LOGI("bsvg", "Done");  |  | ||||||
| 
 |  | ||||||
|         //if (departureList == NULL)
 |  | ||||||
|         //{
 |  | ||||||
|         //    ESP_LOGI("bsvg", "did not get list"); 
 |  | ||||||
|         //    const char *error_ptr = cJSON_GetErrorPtr();
 |  | ||||||
|         //    heap_caps_print_heap_info(MALLOC_CAP_DEFAULT);
 |  | ||||||
|         //    if (error_ptr != NULL)
 |  | ||||||
|         //    {
 |  | ||||||
|         //        fprintf(stderr, "Error at %ld: %.10s\n", (uint32_t)error_ptr-(uint32_t)bsvg_buf, error_ptr);
 |  | ||||||
|         //        fprintf(stderr, "%.100s%.100s\n", error_ptr-100, error_ptr);
 |  | ||||||
|         //        fprintf(stderr, "                                                                                                    ^\n");
 |  | ||||||
|         //    }
 |  | ||||||
|         //    else {
 |  | ||||||
|         //        fprintf(stderr, "did not get err ptr\n");
 |  | ||||||
|         //    }
 |  | ||||||
|         //}else{
 |  | ||||||
|         //    ESP_LOGI("bsvg", "got list"); 
 |  | ||||||
|         //    printf("free heap: %d\n", heap_caps_get_free_size( MALLOC_CAP_DEFAULT) );
 |  | ||||||
|         //    ESP_LOGI("bsvg", "type: %d", departureList->type); 
 |  | ||||||
|         //    ESP_LOGI("bsvg", "child: %ld", (uint32_t)departureList->child); 
 |  | ||||||
|         //    if(cJSON_IsArray(departureList)){
 |  | ||||||
|         //        ESP_LOGI("bsvg", "is Array"); 
 |  | ||||||
|         //        const cJSON *departure = NULL;
 |  | ||||||
|         //        cJSON_ArrayForEach(departure, departureList){
 |  | ||||||
|         //            cJSON *number = cJSON_GetObjectItemCaseSensitive(cJSON_GetObjectItemCaseSensitive(departure, "servingLine"), "number");;
 |  | ||||||
|         //            if(number == NULL)
 |  | ||||||
|         //                ESP_LOGI("bsvg", "cant get number");
 |  | ||||||
|         //            else if(cJSON_IsNumber(number))
 |  | ||||||
|         //                ESP_LOGI("bsvg", "number (int): %d\n", number->valueint);
 |  | ||||||
|         //            else if(cJSON_IsString(number))
 |  | ||||||
|         //                ESP_LOGI("bsvg", "number (str): %.3s\n", number->valuestring);
 |  | ||||||
|         //            else 
 |  | ||||||
|         //                ESP_LOGI("bsvg", "cant get number value");
 |  | ||||||
|         //        }
 |  | ||||||
|         //    }
 |  | ||||||
|         //}
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|         vTaskDelay(6000); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,60 +0,0 @@ | |||||||
| #include <stdint.h> |  | ||||||
| #include <stdio.h> |  | ||||||
| #include "text.h" |  | ||||||
| 
 |  | ||||||
| uint8_t check_chr_width(const uint8_t chr[]){ |  | ||||||
|     for(int i=6;i>=0;i--) |  | ||||||
|         if(chr[i] != 0) |  | ||||||
|             return i; |  | ||||||
|     return 2; //space character
 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void put_chr(uint8_t framebuffer[DISPLAY_HEIGHT][DISPLAY_WIDTH][3], uint8_t line, uint8_t pos, const uint8_t chr[], uint8_t size){ |  | ||||||
|     for(int i=0;i<8;i++) |  | ||||||
|         for(int j=0;j<7;j++){ |  | ||||||
|             uint8_t val = (chr[j]&(1<<i))>>i; |  | ||||||
|             for(int x=0;x<size;x++) |  | ||||||
|                 for(int y=0;y<size;y++) |  | ||||||
|                     framebuffer[1+(line*10)+(i*size)+y][(pos)+(j*size)+x][0] = val; |  | ||||||
|         } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void put_line(uint8_t framebuffer[DISPLAY_HEIGHT][DISPLAY_WIDTH][3], uint8_t line, char *str, uint8_t spacing, uint8_t size){ |  | ||||||
|     uint8_t pos = 0; |  | ||||||
|     uint8_t disp_pos = 0; |  | ||||||
|     while(str[pos] != 0){ |  | ||||||
|         uint16_t code = 0; |  | ||||||
|         if((str[pos]&0xE0) == 0xC0 && (str[pos+1]&0xC0) == 0x80){ |  | ||||||
|             code = (str[pos] & 0x1F) << 6; |  | ||||||
|             code |= (str[pos+1] & 0x3F); |  | ||||||
|             printf("mbc: %x\n", font[code][0]); |  | ||||||
|             pos++; |  | ||||||
|         }else{ |  | ||||||
|             code = str[pos]; |  | ||||||
|         } |  | ||||||
|         put_chr(framebuffer, line, disp_pos, font[code-0x20], size); |  | ||||||
|         disp_pos += (check_chr_width(font[code-0x20]) + 1 + spacing)*size; |  | ||||||
|         pos++; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void put_line_center(uint8_t framebuffer[DISPLAY_HEIGHT][DISPLAY_WIDTH][3], uint8_t line, char *str, uint8_t spacing, uint8_t size){ |  | ||||||
|     uint8_t pos = 0; |  | ||||||
|     uint8_t txt_length = 0; |  | ||||||
| 
 |  | ||||||
|     while(str[pos] != 0){ |  | ||||||
|         txt_length += (check_chr_width(font[str[pos]-0x20]) + 1 + spacing)*size; |  | ||||||
|         pos++; |  | ||||||
|     } |  | ||||||
|     pos=0; |  | ||||||
| 
 |  | ||||||
|     uint8_t disp_pos = (DISPLAY_WIDTH/2) - (txt_length/2); |  | ||||||
| 
 |  | ||||||
|     while(str[pos] != 0){ |  | ||||||
|         put_chr(framebuffer, line, disp_pos, font[str[pos]-0x20], size); |  | ||||||
|         disp_pos += (check_chr_width(font[str[pos]-0x20]) + 1 + spacing)*size; |  | ||||||
|         pos++; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| @ -1,12 +0,0 @@ | |||||||
| #ifndef _TEXT_H_ |  | ||||||
| #define _TEXT_H_ |  | ||||||
| 
 |  | ||||||
| #include <stdint.h> |  | ||||||
| #include "display.h" |  | ||||||
| 
 |  | ||||||
| extern const uint8_t font[96][7]; |  | ||||||
| 
 |  | ||||||
| void put_line(uint8_t framebuffer[DISPLAY_HEIGHT][DISPLAY_WIDTH][3], uint8_t line, char *str, uint8_t spacing, uint8_t size); |  | ||||||
| void put_line_center(uint8_t framebuffer[DISPLAY_HEIGHT][DISPLAY_WIDTH][3], uint8_t line, char *str, uint8_t spacing, uint8_t size); |  | ||||||
| 
 |  | ||||||
| #endif |  | ||||||
| @ -1,115 +0,0 @@ | |||||||
| #include "sdkconfig.h" |  | ||||||
| #include "esp_system.h" |  | ||||||
| #include "esp_event.h" |  | ||||||
| #include "nvs_flash.h" |  | ||||||
| #include "esp_log.h" |  | ||||||
| #include "esp_wifi.h" |  | ||||||
| 
 |  | ||||||
| static const char *TAG = "wlan"; |  | ||||||
| 
 |  | ||||||
| /* The event group allows multiple bits for each event, but we only care about two events:
 |  | ||||||
|  * - we are connected to the AP with an IP |  | ||||||
|  * - we failed to connect after the maximum amount of retries */ |  | ||||||
| #define WIFI_CONNECTED_BIT BIT0 |  | ||||||
| #define WIFI_FAIL_BIT      BIT1 |  | ||||||
| 
 |  | ||||||
| /* FreeRTOS event group to signal when we are connected*/ |  | ||||||
| static EventGroupHandle_t s_wifi_event_group; |  | ||||||
| static int s_retry_num = 0; |  | ||||||
| static void event_handler(void* arg, esp_event_base_t event_base, |  | ||||||
|                                 int32_t event_id, void* event_data) |  | ||||||
| { |  | ||||||
|     if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) { |  | ||||||
|         esp_wifi_connect(); |  | ||||||
|     } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) { |  | ||||||
|         if (s_retry_num < CONFIG_ESP_MAXIMUM_RETRY) { |  | ||||||
|             esp_wifi_connect(); |  | ||||||
|             s_retry_num++; |  | ||||||
|             ESP_LOGI(TAG, "retry to connect to the AP"); |  | ||||||
|         } else { |  | ||||||
|             xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT); |  | ||||||
|         } |  | ||||||
|         ESP_LOGI(TAG,"connect to the AP fail"); |  | ||||||
|     } else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) { |  | ||||||
|         ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data; |  | ||||||
|         ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip)); |  | ||||||
|         s_retry_num = 0; |  | ||||||
|         xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void wifi_init_sta(void) |  | ||||||
| { |  | ||||||
|     s_wifi_event_group = xEventGroupCreate(); |  | ||||||
| 
 |  | ||||||
|     ESP_ERROR_CHECK(esp_netif_init()); |  | ||||||
| 
 |  | ||||||
|     ESP_ERROR_CHECK(esp_event_loop_create_default()); |  | ||||||
|     esp_netif_create_default_wifi_sta(); |  | ||||||
| 
 |  | ||||||
|     wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); |  | ||||||
|     ESP_ERROR_CHECK(esp_wifi_init(&cfg)); |  | ||||||
| 
 |  | ||||||
|     esp_event_handler_instance_t instance_any_id; |  | ||||||
|     esp_event_handler_instance_t instance_got_ip; |  | ||||||
|     ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT, |  | ||||||
|                                                         ESP_EVENT_ANY_ID, |  | ||||||
|                                                         &event_handler, |  | ||||||
|                                                         NULL, |  | ||||||
|                                                         &instance_any_id)); |  | ||||||
|     ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT, |  | ||||||
|                                                         IP_EVENT_STA_GOT_IP, |  | ||||||
|                                                         &event_handler, |  | ||||||
|                                                         NULL, |  | ||||||
|                                                         &instance_got_ip)); |  | ||||||
| 
 |  | ||||||
|     wifi_config_t wifi_config = { |  | ||||||
|         .sta = { |  | ||||||
|             .ssid = CONFIG_ESP_WIFI_SSID, |  | ||||||
|             .password = CONFIG_ESP_WIFI_PASSWORD, |  | ||||||
|             ///* Authmode threshold resets to WPA2 as default if password matches WPA2 standards (pasword len => 8).
 |  | ||||||
|             // * If you want to connect the device to deprecated WEP/WPA networks, Please set the threshold value
 |  | ||||||
|             // * to WIFI_AUTH_WEP/WIFI_AUTH_WPA_PSK and set the password with length and format matching to
 |  | ||||||
|             // * WIFI_AUTH_WEP/WIFI_AUTH_WPA_PSK standards.
 |  | ||||||
|             // */
 |  | ||||||
|             //.threshold.authmode = ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD,
 |  | ||||||
|             //.sae_pwe_h2e = ESP_WIFI_SAE_MODE,
 |  | ||||||
|             //.sae_h2e_identifier = EXAMPLE_H2E_IDENTIFIER,
 |  | ||||||
|         }, |  | ||||||
|     }; |  | ||||||
|     ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) ); |  | ||||||
|     ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config) ); |  | ||||||
|     ESP_ERROR_CHECK(esp_wifi_start() ); |  | ||||||
| 
 |  | ||||||
|     ESP_LOGI(TAG, "wifi_init_sta finished."); |  | ||||||
| 
 |  | ||||||
|     /* Waiting until either the connection is established (WIFI_CONNECTED_BIT) or connection failed for the maximum
 |  | ||||||
|      * number of re-tries (WIFI_FAIL_BIT). The bits are set by event_handler() (see above) */ |  | ||||||
|     EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group, |  | ||||||
|             WIFI_CONNECTED_BIT | WIFI_FAIL_BIT, |  | ||||||
|             pdFALSE, |  | ||||||
|             pdFALSE, |  | ||||||
|             portMAX_DELAY); |  | ||||||
| 
 |  | ||||||
|     /* xEventGroupWaitBits() returns the bits before the call returned, hence we can test which event actually
 |  | ||||||
|      * happened. */ |  | ||||||
|     if (bits & WIFI_CONNECTED_BIT) { |  | ||||||
|         ESP_LOGI(TAG, "connected to ap SSID:%s password:%s", |  | ||||||
|                  CONFIG_ESP_WIFI_SSID, CONFIG_ESP_WIFI_PASSWORD); |  | ||||||
|     } else if (bits & WIFI_FAIL_BIT) { |  | ||||||
|         ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s", |  | ||||||
|                  CONFIG_ESP_WIFI_SSID, CONFIG_ESP_WIFI_PASSWORD); |  | ||||||
|     } else { |  | ||||||
|         ESP_LOGE(TAG, "UNEXPECTED EVENT"); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void wlan_init(){ |  | ||||||
|     esp_err_t ret = nvs_flash_init(); |  | ||||||
|     if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { |  | ||||||
|         ESP_ERROR_CHECK(nvs_flash_erase()); |  | ||||||
|         ret = nvs_flash_init(); |  | ||||||
|     } |  | ||||||
|     ESP_ERROR_CHECK(ret); |  | ||||||
|     wifi_init_sta(); |  | ||||||
| } |  | ||||||
| @ -1 +0,0 @@ | |||||||
| void wlan_init(void); |  | ||||||
| @ -0,0 +1,6 @@ | |||||||
|  | CONFIG_APP_BUILD_TYPE_ELF_RAM=y | ||||||
|  | CONFIG_VFS_SUPPORT_TERMIOS= | ||||||
|  | CONFIG_NEWLIB_NANO_FORMAT=y | ||||||
|  | CONFIG_ESP32_PANIC_PRINT_HALT=y | ||||||
|  | CONFIG_ESP32_DEBUG_STUBS_ENABLE= | ||||||
|  | CONFIG_ESP_ERR_TO_NAME_LOOKUP= | ||||||
											
												
													File diff suppressed because it is too large
													Load Diff
												
											
										
									
								
					Loading…
					
					
				
		Reference in New Issue