สร้างแผงควบคุมเซนเซอร์ขนาดกะทัดรัด
จอแสดงผลเซ็นเซอร์IoT
สร้างแดชบอร์ดขนาดเล็กที่รวมการอ่านค่าเซ็นเซอร์หลายค่าไว้ในจอแสดงผลเดียว และแนะนำข้อมูลที่มีโครงสร้าง การจัดวางหน้าจอ และการอัปเดตเป็นระยะ
รวมชิ้นส่วนจริง 8 รายการ
ราคารวมชุดนี้: 1,546.00 ฿
ยังไม่รวมส่วนลดคำสั่งซื้อที่คุณอาจได้รับตอนชำระเงิน
สิ่งที่คุณต้องใช้
บอร์ดพัฒนา ESP32-S3 — Wi-Fi และ Bluetooth, PSRAM 8MB / Flash 16MB, USB-C
360.00 ฿
โมดูลจอแสดงผล OLED I2C ขนาด 0.96 นิ้ว — 128×64, สีขาว
285.00 ฿
โมดูลเซ็นเซอร์อุณหภูมิและความชื้น AHT20 — I2C
260.00 ฿
โมดูลโรตารีเอ็นโค้ดเดอร์ — 360° พร้อมปุ่ม
27.00 ฿
เบรดบอร์ดไร้บัดกรี 830 จุด
125.00 ฿
ชุดสายจัมเปอร์ — ผู้-ผู้, ผู้-เมีย, เมีย-เมีย
220.00 ฿
สายชาร์จและซิงค์ข้อมูล USB-C — 1 ม.
180.00 ฿
กล่องหุ้มโปรเจกต์อิเล็กทรอนิกส์ — 100×60×25 มม.
89.00 ฿
แผนภาพการต่อสาย
โค้ดเริ่มต้น
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_AHTX0.h>
#define SDA_PIN 8
#define SCL_PIN 9
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define OLED_ADDR 0x3C
#define ENC_CLK_PIN 4
#define ENC_DT_PIN 5
#define ENC_SW_PIN 6
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Adafruit_AHTX0 aht;
sensors_event_t humidityEvent, tempEvent;
int screenIndex = 0;
const int NUM_SCREENS = 3;
int lastClkState;
unsigned long lastButtonPress = 0;
void readSensor() {
aht.getEvent(&humidityEvent, &tempEvent);
}
void drawScreen() {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
switch (screenIndex) {
case 0:
display.println("TEMPERATURE");
display.setTextSize(2);
display.setCursor(0, 20);
display.print(tempEvent.temperature, 1);
display.println(" C");
break;
case 1:
display.println("HUMIDITY");
display.setTextSize(2);
display.setCursor(0, 20);
display.print(humidityEvent.relative_humidity, 1);
display.println(" %");
break;
case 2:
display.println("SUMMARY");
display.setCursor(0, 20);
display.print("Temp: ");
display.print(tempEvent.temperature, 1);
display.println(" C");
display.print("Hum: ");
display.print(humidityEvent.relative_humidity, 1);
display.println(" %");
break;
}
display.display();
}
void setup() {
Serial.begin(115200);
Wire.begin(SDA_PIN, SCL_PIN);
pinMode(ENC_CLK_PIN, INPUT);
pinMode(ENC_DT_PIN, INPUT);
pinMode(ENC_SW_PIN, INPUT_PULLUP);
lastClkState = digitalRead(ENC_CLK_PIN);
if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) {
Serial.println("OLED not found — check wiring.");
while (1) delay(1000);
}
if (!aht.begin()) {
Serial.println("AHT20 not found — check wiring.");
while (1) delay(1000);
}
readSensor();
drawScreen();
}
void loop() {
// Rotary encoder rotation: compare CLK against DT on each CLK edge
int clkState = digitalRead(ENC_CLK_PIN);
if (clkState != lastClkState && clkState == HIGH) {
if (digitalRead(ENC_DT_PIN) != clkState) {
screenIndex = (screenIndex + 1) % NUM_SCREENS; // clockwise
} else {
screenIndex = (screenIndex - 1 + NUM_SCREENS) % NUM_SCREENS; // counter-clockwise
}
drawScreen();
}
lastClkState = clkState;
// Push button: force a sensor refresh
if (digitalRead(ENC_SW_PIN) == LOW && millis() - lastButtonPress > 250) {
lastButtonPress = millis();
readSensor();
drawScreen();
}
static unsigned long lastAutoRead = 0;
if (millis() - lastAutoRead > 2000) {
lastAutoRead = millis();
readSensor();
drawScreen();
}
}ไม่แน่ใจขั้นตอนไหน? ถามเรา