STM32 보드에 없는 통신 기능을 이용하기 위해 ESP32 C3 를 SPI로 연결.
동작:
1. STM32 보드는 DHT22에서 주기적으로 온습도 정보를 읽는다.
2. ESP32 보드로 온습도 값을 전송한다.
3. CAN으로 주기적으로 값을 Raspberry pi 보드에 전송한다.
4. LCD 에 온습도 값을 출력한다.
5. ESP32 보드는 BLE에 연결된 기기(Raspberry pi)가 있으면 요청에 따라 온습도 값을 전송한다.
DHT22Task
void StartDHT22Task(void *argument)
{
for(;;)
{
DHT_GetData(&dht22Data);
xQueueSend(dht22Queue, &dht22Data, pdMS_TO_TICKS(100));
xQueueSend(spiQueue, &dht22Data, pdMS_TO_TICKS(100));
}
}
DisplayTask
void StartDisplayTask(void *argument)
{
ssd1306_Init(&hi2c1);
for(;;)
{
if (xQueueReceive(dht22Queue, &dht22Data, pdMS_TO_TICKS(100)) == pdPASS)
{
vMainCanTransmit(&hcan1, &dht22Data);
ssd1306_WriteString(temperature, Font_7x10, White);
ssd1306_WriteString(humidity, Font_7x10, White);
ssd1306_UpdateScreen(&hi2c1);
}
vTaskDelay(pdMS_TO_TICKS(500));
}
}
BleTask
void StartBleTask(void *argument)
{
for(;;)
{
if (xQueueReceive(spiQueue, &dht22Data, pdMS_TO_TICKS(100)) == pdPASS)
{
HAL_StatusTypeDef status = HAL_SPI_Transmit(&hspi2, txData, 4, HAL_MAX_DELAY);
}
}
}
BLE는 요청할때만 읽는 방식으로
static const esp_gatts_attr_db_t gatt_db[HRS_IDX_NB] = {
// Temperature Characteristic Value
[IDX_CHAR_TEMP_VAL] = {{ESP_GATT_RSP_BY_APP}, {ESP_UUID_LEN_16, (uint8_t *)&gatts_char_temperature_uuid, ESP_GATT_PERM_READ,
sizeof(uint16_t), 0, NULL}},
// Humidity Characteristic Value
[IDX_CHAR_HUMID_VAL] = {{ESP_GATT_RSP_BY_APP}, {ESP_UUID_LEN_16, (uint8_t *)&gatts_char_humidity_uuid, ESP_GATT_PERM_READ,
sizeof(uint16_t)*2, 0, NULL}},
};
테스트용으로만 데이터 읽어오기.
async def periodic_read(client):
while True:
try:
temperpature = await client.read_gatt_char(TEMPERATURE_CHAR_UUID)
await asyncio.sleep(1)
try:
humidity = await client.read_gatt_char(HUMIDITY_CHAR_UUID)
await asyncio.sleep(3)
async def main():
devices = await BleakScanner.discover(timeout=5)
async with BleakClient(target.address) as client:
read_task = asyncio.create_task(periodic_read(client))
while True:
await asyncio.sleep(1)
실행화면
STM32의 전원을 ESP32에 연결해놓으니
둘중 어느 한 보드에 전원이 들어가도 두 보드 모두에 전원이 함께 들어가는 상황이 되었다.
각각을 USB 허브에 연결하니 두 보드의 펌웨어를 수정하기 편한 상황이 되었다.
코드
https://github.com/ipondroid/mcus/tree/main
GitHub - ipondroid/mcus: STM32 - ESP32 - RaspberryPi
STM32 - ESP32 - RaspberryPi. Contribute to ipondroid/mcus development by creating an account on GitHub.
github.com
'MCU' 카테고리의 다른 글
Vector table (0) | 2025.06.17 |
---|---|
STM32-CAN-Raspberry Pi (0) | 2025.04.07 |
DHT22 온습도 센서 (0) | 2025.03.23 |
OLED display 128x32 (0) | 2025.02.28 |
STM32 clock (0) | 2025.01.23 |