Compare commits

..

2 Commits

View File

@ -15,6 +15,12 @@
#include "driver/gpio.h"
#include "ssd1306/ssd1306.h"
#include "esp_wifi.h"
#include "esp_http_server.h"
#include "esp_netif.h"
#include "nvs_flash.h"
#include "esp_event.h"
static const char *TAG = "PMME-Device";
#define I2C_HOST 0
@ -72,7 +78,7 @@ void send_pms7003_command(uint8_t cmd, uint8_t datah, uint8_t datal) {
void read_pm_data(uint8_t *buf) {
uint16_t checksum = 0;
for (int i = 0; i <= 29; i++) {
for (int i = 0; i <= 28; i++) {
checksum += buf[i];
}
uint16_t c = (((uint16_t)buf[30]) << 8) | ((uint16_t)buf[31]);
@ -124,13 +130,12 @@ void pm_sensor_task(void *pvParameters) {
int len = uart_read_bytes(UART_NUM, uart_data, BUF_SIZE, 100 / portTICK_PERIOD_MS);
// ESP_LOGI(TAG, "Received %d bytes from sensor", len);
if (len > 0) {
if (len == 32 && (uart_data[0] != 0x42 || uart_data[1] != 0x4D)) {
if (uart_data[0] != 0x42 || uart_data[1] != 0x4D) {
ESP_LOGW(TAG, "Frame Start does not match 0x42, 0x4D, instead got %x %x", uart_data[0], uart_data[1]);
} else {
} else if (len == 32) {
read_pm_data(uart_data);
// for(int i = 0; i < len && i < BUF_SIZE; i++) {
// ESP_LOGI(TAG, "0x%02X", uart_data[i]);
// }
} else {
ESP_LOGW(TAG, "Unexpected frame length: %d", len);
}
}
uart_flush(UART_NUM);
@ -261,6 +266,62 @@ void button_led_task(void *pvParameters) {
}
}
static esp_err_t provision_handler(httpd_req_t *req) {
const char *response = "<html><body>Hello world!</body></html>";
httpd_resp_send(req, response, strlen(response));
return ESP_OK;
}
void wifi_task(void *pvParameters) {
// 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());
ESP_ERROR_CHECK(nvs_flash_init());
}
ESP_ERROR_CHECK(esp_netif_init());
ESP_ERROR_CHECK(esp_event_loop_create_default());
esp_netif_create_default_wifi_ap();
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
wifi_config_t wifi_config = {
.ap = {
.ssid = "PMME-Wifi",
.password = "88888888",
.ssid_len = strlen("PMME-Wifi"),
.channel = 1,
.authmode = WIFI_AUTH_WPA2_PSK,
.max_connection = 2,
},
};
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP));
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_AP, &wifi_config));
ESP_ERROR_CHECK(esp_wifi_start());
ESP_LOGI(TAG, "WiFi AP started: SSID=PMME-Wifi");
httpd_handle_t server = NULL;
httpd_config_t server_config = HTTPD_DEFAULT_CONFIG();
ESP_ERROR_CHECK(httpd_start(&server, &server_config));
httpd_uri_t provision_uri = {
.uri = "/api/provision",
.method = HTTP_GET,
.handler = provision_handler,
.user_ctx = NULL,
};
ESP_ERROR_CHECK(httpd_register_uri_handler(server, &provision_uri));
ESP_LOGI(TAG, "HTTP server started on port %d", server_config.server_port);
while (1) {
vTaskDelay(pdMS_TO_TICKS(500));
}
}
void app_main(void) {
sensor_data_mutex = xSemaphoreCreateMutex();
if (sensor_data_mutex == NULL) {
@ -270,4 +331,5 @@ void app_main(void) {
xTaskCreate(pm_sensor_task, "pm_sensor_task", 4096, NULL, 5, NULL);
xTaskCreate(oled_display_task, "oled_display_task", 4096, NULL, 5, NULL);
xTaskCreate(button_led_task, "button_led_task", 2048, NULL, 5, NULL);
xTaskCreate(wifi_task, "wifi_task", 8192, NULL, 5, NULL);
}