77 lines
		
	
	
		
			No EOL
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			No EOL
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "Arduino.h"
 | |
| 
 | |
| #include "nvs_flash.h"
 | |
| #include <mutex>
 | |
| 
 | |
| #include "ESP32epdx.h"
 | |
| #include "EPD.h"
 | |
| //#include "IMAGE.h"
 | |
| #include "wifi_helper.h"
 | |
| #include "mqtt_helper.h"
 | |
| 
 | |
| std::mutex epd_mtx;
 | |
| 
 | |
| /*
 | |
| SPI: SCK = 6 ; MISO = 2 ; MOSI = 7 ; SS = 16
 | |
| EPD: RES = 22 ; DC = 23 ; CS = 1 ; BUSY = 0
 | |
| */
 | |
| 
 | |
| extern "C" void mqtt_event_data_callback_func(char* topic, int topic_len, char* data, int data_len)
 | |
| {
 | |
|   if (strncmp(topic, CONFIG_MQTT_TOPIC, topic_len))
 | |
|     return;
 | |
|   
 | |
|   // process
 | |
|   if (data_len == 5624)
 | |
|   {
 | |
|     printf("TOPIC (len: %d) -> %.*s\nMESSAGE (len: %d)\n", topic_len, topic_len, topic, data_len);
 | |
|     if (epd_mtx.try_lock()) 
 | |
|     {
 | |
|       // work
 | |
|       EPD_HW_Init_Fast();
 | |
|       EPD_Display((unsigned char *)data);
 | |
|       EPD_DeepSleep();
 | |
| 
 | |
|       // unlock
 | |
|       epd_mtx.unlock();
 | |
|     } 
 | |
|     else 
 | |
|     {
 | |
|       // locked
 | |
|       return;
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| extern "C" void app_main()
 | |
| {
 | |
|   initArduino();
 | |
| 
 | |
|   //Initialize NVS
 | |
|   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);
 | |
| 
 | |
|   // Initialize EPD
 | |
|   EPD_Pin_Init(6, 2, 7, 16,
 | |
|     22, 23, 1, 0);
 | |
| 
 | |
|   // Connect to WiFi
 | |
|   connect_wifi();
 | |
| 
 | |
|   // Connect to MQTT broker
 | |
|   connect_mqtt();
 | |
| 
 | |
|   // Arduino-like setup()
 | |
| 
 | |
|   // Arduino-like loop()
 | |
|   while (true)
 | |
|   {
 | |
|     vTaskDelay(500);
 | |
|   }
 | |
| 
 | |
|   // WARNING: if program reaches end of function app_main() the MCU will restart.
 | |
| } |