Arduino Nano와 기타 부품에 전원을 공급하는 가장 효과적인 방법은 다음 링크를 참조하세요: 아두이노 나노 전원 공급 방법.
아두이노 나노 코드 - DHT11 센서 - OLED
/* * 이 아두이노 나노 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 나노 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano/arduino-nano-temperature-humidity-sensor-oled */#include <Wire.h>#include <Adafruit_GFX.h>#include <Adafruit_SSD1306.h>#include <DHT.h>#define OLED_WIDTH 128 // OLED 디스플레이 너비, 픽셀 단위#define OLED_HEIGHT 64 // OLED 디스플레이 높이, 픽셀 단위#define DHT_PIN 2 // DHT11 센서에 연결된 아두이노 나노 핀#define DHT_TYPE DHT11Adafruit_SSD1306oled(OLED_WIDTH, OLED_HEIGHT, &Wire, -1); // I2C에 연결된 SSD1306 디스플레이 객체 생성DHT dht(DHT_PIN, DHT_TYPE);String displayString;voidsetup() {Serial.begin(9600);// 주소 0x3C로 128x64를 위한 OLED 디스플레이 초기화if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {Serial.println(F("SSD1306 할당 실패"));while (true); }delay(2000); // 초기화를 위해 대기oled.clearDisplay(); // 디스플레이 지우기oled.setTextSize(2); // 텍스트 크기oled.setTextColor(WHITE); // 텍스트 색상oled.setCursor(0, 10); // 디스플레이 위치 지정 dht.begin(); // 온도 및 습도 센서 DHT11 초기화 displayString.reserve(10); // String 사용 시 메모리 단편화 방지를 위해}voidloop() {float humi = dht.readHumidity(); // 습도 읽기float temperature_C = dht.readTemperature(); // 온도 읽기// 읽기 실패 여부 확인if (isnan(humi) || isnan(temperature_C)) { displayString = "Failed"; } else { displayString = String(temperature_C, 1); // 소수점 한 자리 displayString += "°C"; displayString += String(humi, 1); // 소수점 한 자리 displayString += "%"; }Serial.println(displayString); // 시리얼 모니터에 섭씨 온도 출력 oled_display_center(displayString); // OLED에 온도 및 습도 디스플레이}void oled_display_center(String text) {int16_t x1;int16_t y1;uint16_t width;uint16_t height;oled.getTextBounds(text, 0, 0, &x1, &y1, &width, &height);// 수평 및 수직으로 디스플레이 중앙에 배치oled.clearDisplay(); // 디스플레이 지우기oled.setCursor((OLED_WIDTH - width) / 2, (OLED_HEIGHT - height) / 2);oled.println(text); // 디스플레이할 텍스트oled.display();}
사용 방법
Arduino IDE의 왼쪽 바에 있는 Libraries 아이콘을 클릭하세요.
"SSD1306"을 찾은 후 Adafruit에서 SSD1306 라이브러리를 찾으세요.
라이브러리를 설치하려면 Install 버튼을 누르세요.
다른 라이브러리 종속성을 설치하라는 요청을 받게 됩니다.
모든 라이브러리 종속성의 설치를 완료하려면 Install All 버튼을 누르세요.
“DHT”를 검색하고 Adafruit DHT 센서 라이브러리를 찾으세요.
라이브러리를 설치하려면 Install 버튼을 누르세요.
다른 라이브러리 의존성을 설치하라는 요청을 받게 될 것입니다.
모든 라이브러리 의존성을 설치하려면 Install All 버튼을 클릭하세요.
위에 있는 코드를 복사해서 아두이노 IDE에서 열어주세요.
아두이노 IDE에서 Upload 버튼을 클릭해서 코드를 아두이노 나노로 보내주세요.
센서를 뜨거운 물과 차가운 물에 넣거나 손으로 잡아주세요.
OLED와 시리얼 모니터에서 결과를 확인하세요.
※ 주의:
해당 코드는 OLED 디스플레이에서 텍스트를 수평 및 수직으로 자동으로 중앙에 배치합니다.
아두이노 나노 코드 - DHT22 센서 - OLED
/* * 이 아두이노 나노 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 나노 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano/arduino-nano-temperature-humidity-sensor-oled */#include <Wire.h>#include <Adafruit_GFX.h>#include <Adafruit_SSD1306.h>#include <DHT.h>#define OLED_WIDTH 128 // OLED 디스플레이 너비, 픽셀 단위#define OLED_HEIGHT 64 // OLED 디스플레이 높이, 픽셀 단위#define DHT_PIN 2 // DHT22 센서에 연결된 아두이노 나노 핀#define DHT_TYPE DHT22Adafruit_SSD1306oled(OLED_WIDTH, OLED_HEIGHT, &Wire, -1); // I2C에 연결된 SSD1306 디스플레이 객체 생성DHT dht(DHT_PIN, DHT_TYPE);String displayString;voidsetup() {Serial.begin(9600);// 128x64용 주소 0x3C로 OLED 디스플레이 초기화if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {Serial.println(F("SSD1306 할당 실패"));while (true); }delay(2000); // 초기화를 기다림oled.clearDisplay(); // 디스플레이 지우기oled.setTextSize(2); // 텍스트 크기oled.setTextColor(WHITE); // 텍스트 색상oled.setCursor(0, 10); // 표시할 위치 dht.begin(); // 온습도 센서 DHT22 초기화 displayString.reserve(10); // String 사용시 메모리 단편화 방지}voidloop() {float humi = dht.readHumidity(); // 습도 읽기float temperature_C = dht.readTemperature(); // 온도 읽기// 읽기 실패 여부 확인if (isnan(humi) || isnan(temperature_C)) { displayString = "Failed"; } else { displayString = String(temperature_C, 1); // 소수점 한 자리 displayString += "°C"; displayString += String(humi, 1); // 소수점 한 자리 displayString += "%"; }Serial.println(displayString); // 씨리얼 모니터에 섭씨 온도 출력 oled_display_center(displayString); // OLED에 온도와 습도 표시}void oled_display_center(String text) {int16_t x1;int16_t y1;uint16_t width;uint16_t height;oled.getTextBounds(text, 0, 0, &x1, &y1, &width, &height);// 수평 및 수직으로 디스플레이 중앙 정렬oled.clearDisplay(); // 디스플레이 지우기oled.setCursor((OLED_WIDTH - width) / 2, (OLED_HEIGHT - height) / 2);oled.println(text); // 화면에 표시할 텍스트oled.display();}
※ 주의:
DHT11과 DHT22의 코드는 한 줄을 제외하고는 같습니다. 두 경우에 사용되는 라이브러리도 같습니다.
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.