• GPIO17 — TX,
• GPIO16 — RX,
• GPIO4 — SET,
• GPIO5 — RESET.
- #include <stdio.h>
- #include <string.h>
- #include "freertos/FreeRTOS.h"
- #include "freertos/task.h"
- #include "freertos/event_groups.h"
- #include "freertos/semphr.h"
- #include "esp_system.h"
- #include "nvs_flash.h"
- #include "esp_log.h"
- #include "mqtt_client.h"
- #include "driver/uart.h"
- #include "driver/gpio.h"
- #define UART_RX_PIN 16
- #define UART_TX_PIN 17
- #define SET_PIN 4
- #define RESET_PIN 5
- #define WIFI_SSID "SSID"
- #define WIFI_PASSWORD "<hasło WiFi> "
- #define MQTT_BROKER "<adres brokera MQTT>"
- #define MQTT_PORT 1883
- #define MQTT_TOPIC "jakosc_powietrza"
- static esp_mqtt_client_handle_t mqtt_client;
- static esp_err_t wifi_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_CONNECTED:
- break;
- case SYSTEM_EVENT_STA_GOT_IP:
- break;
- case SYSTEM_EVENT_STA_DISCONNECTED:
- esp_wifi_connect();
- break;
- default:
- break;
- }
- return ESP_OK;
- }
- static void wifi_init()
- {
- tcpip_adapter_init();
- ESP_ERROR_CHECK(esp_event_loop_init(wifi_event_handler, NULL));
- wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
- ESP_ERROR_CHECK(esp_wifi_init(&cfg));
- wifi_config_t wifi_config = {
- .sta = {
- .ssid = WIFI_SSID,
- .password = WIFI_PASSWORD,
- },
- };
- ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
- ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config));
- ESP_ERROR_CHECK(esp_wifi_start());
- }
- static esp_err_t mqtt_event_handler(esp_mqtt_event_handle_t event) {
- switch (event->event_id) {
- case MQTT_EVENT_CONNECTED:
- ESP_LOGI("MQTT", "Połączono z brokerem MQTT");
- break;
- case MQTT_EVENT_DISCONNECTED:
- ESP_LOGI("MQTT", "Rozłączono z brokerem MQTT");
- break;
- default:
- break;
- }
- return ESP_OK;
- }
- static void mqtt_init() {
- esp_mqtt_client_config_t mqtt_cfg = {
- .uri = "mqtt://" MQTT_BROKER ":" MQTT_PORT,
- };
- mqtt_client = esp_mqtt_client_init(&mqtt_cfg);
- esp_mqtt_client_register_event(mqtt_client, ESP_EVENT_ANY_ID, mqtt_event_handler, mqtt_client);
- esp_mqtt_client_start(mqtt_client);
- }
- void uart_init()
- {
- uart_config_t uart_config = {
- .baud_rate = 9600,
- .data_bits = UART_DATA_8_BITS,
- .parity = UART_PARITY_DISABLE,
- .stop_bits = UART_STOP_BITS_1,
- .rx_pin = UART_RX_PIN,
- .tx_pin = UART_TX_PIN,
- };
- ESP_ERROR_CHECK(uart_param_config(UART_NUM_2, &uart_config));
- ESP_ERROR_CHECK(uart_set_pin(UART_NUM_2, UART_TX_PIN, UART_RX_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE));
- ESP_ERROR_CHECK(uart_driver_install(UART_NUM_2, 1024, 0, 0, NULL, 0));
- }
- void gpio_init()
- {
- gpio_config_t io_conf = {
- .pin_bit_mask = (1ULL << SET_PIN) | (1ULL << RESET_PIN),
- .mode = GPIO_MODE_OUTPUT,
- .intr_type = GPIO_INTR_DISABLE,
- .pull_up_en = 0,
- .pull_down_en = 0,
- };
- ESP_ERROR_CHECK(gpio_config(&io_conf));
- }
- void pms3003_reset()
- {
- gpio_set_level(RESET_PIN, 0);
- vTaskDelay(100 / portTICK_PERIOD_MS);
- gpio_set_level(RESET_PIN, 1);
- vTaskDelay(1000 / portTICK_PERIOD_MS);
- }
- void app_main()
- {
- nvs_flash_init();
- wifi_init();
- mqtt_init();
- uart_init();
- gpio_init();
- pms3003_reset();
- while (1) {
- uint8_t data[32];
- int len = uart_read_bytes(UART_NUM_2, data, sizeof(data), 1000 / portTICK_RATE_MS);
- if (len == 32 && data[0] == 0x42 && data[1] == 0x4D) {
- uint16_t pm1_0 = (data[6] << 8) | data[7];
- uint16_t pm2_5 = (data[8] << 8) | data[9];
- uint16_t pm10 = (data[10] << 8) | data[11];
- char message[64];
- sprintf(message, "{\"PM1.0\": %u, \"PM2.5\": %u, \"PM10\": %u}", pm1_0, pm2_5, pm10);
- esp_mqtt_client_publish(mqtt_client, MQTT_TOPIC, message, 0, 0, 0);
- }
- vTaskDelay(1000 / portTICK_PERIOD_MS);
- }
- }