반응형
오랜만에 다시 미세먼지 센서와 OLED SSD1306을 연결해 데이터를 확인하는 실습을 한다.
코드는 최대한 간략하게 쓰고 설명한다. 그림 있던 거 또 그리고, 코드 있는 것 또 가져다 쓰고 하는 일도 좀 편하지가 않다.
회로도
아두이노 나노 코드
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SimpleDHT.h>
#include <pm2008_i2c.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
//#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define NUMFLAKES 10 // Number of snowflakes in the animation example
#define LOGO_HEIGHT 16
#define LOGO_WIDTH 16
/*
static const unsigned char PROGMEM logo_bmp[] =
{ B00000000, B11000000,
B00000001, B11000000,
B00000001, B11000000,
B00000011, B11100000,
B11110011, B11100000,
B11111110, B11111000,
B01111110, B11111111,
B00110011, B10011111,
B00011111, B11111100,
B00001101, B01110000,
B00011011, B10100000,
B00111111, B11100000,
B00111111, B11110000,
B01111100, B11110000,
B01110000, B01110000,
B00000000, B00110000 };
*/
PM2008_I2C pm2008_i2c;
int flag = 0; //for interrupt
#define debounceTime 200 // <<- Set debounce Time (unit ms)
void setup()
{
Serial.begin(9600);
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
// 바로 여기다 3C 로 수정한다.
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C))
{ // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
//pinMode(redPin, OUTPUT);
//pinMode(greenPin, OUTPUT);
//pinMode(bluePin, OUTPUT);
//pinMode(buttoninput, INPUT);
// attachInterrupt(0, ButtonInterrupt, FALLING);
//digitalWrite(redPin, LOW);
//digitalWrite(greenPin, LOW);
//digitalWrite(bluePin, LOW);
pm2008_i2c.begin();
pm2008_i2c.command();
initial_oled();
delay(1000);
}
int currentmode = 1;
void loop()
{
//mode lection process
if(currentmode == 1)
{
display.clearDisplay();
showfinedust();
}
Serial.println("Show");
delay(2000);
}
char _buffer[10];
void showfinedust()
{
uint8_t ret = pm2008_i2c.read();
if (ret == 0) {
Serial.print("PM 1.0 (TSI) : ");
Serial.println(pm2008_i2c.pm1p0_tsi);
Serial.print("PM 2.5 (TSI) : : ");
Serial.println(pm2008_i2c.pm2p5_tsi);
Serial.print("PM 10 (TSI) : : ");
Serial.println(pm2008_i2c.pm10_tsi);
}
else
Serial.println("pm2008 Error");
display.setCursor(0, 10);
sprintf(_buffer, "PM1.0 %d", pm2008_i2c.pm1p0_tsi);
display.println(_buffer);
display.setCursor(0, 30);
sprintf(_buffer, "PM2.5 %d", pm2008_i2c.pm2p5_tsi);
display.println(_buffer);
display.setCursor(0, 50);
sprintf(_buffer, "PM10 %d", pm2008_i2c.pm10_tsi);
display.println(_buffer);
// update the display
display.display();
delay(1000);
}
void initial_oled()
{
//initialize the SSD1306 OLED display with I2C address = 0x3D
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// clear the display buffer.
display.clearDisplay();
//display.setTextSize(1); // text size = 1
display.setTextColor(WHITE, BLACK); // set text color to white and black background
//display.setCursor(15, 0); // move cursor to position (15, 0) pixel
//display.print("Today Weather");
//display.display(); // update the display
display.setTextSize(2); // text size = 2
}
참고 자료
Portable Fine Dust PM10 Analyzer with Large OLED Digits
반응형
'아두이노우노 R4' 카테고리의 다른 글
TTP223B 터치 센서와 아두이노를 연동하는 방법 (1) | 2024.08.12 |
---|---|
아두이노 나노 33 IoT 기반 NTP 세계 시계 사용 (1) | 2024.08.07 |
아두이노 푸시 버튼 - 전체 자습서 (1) | 2024.08.05 |
Nano 33 IoT BLE Scanner 코드 (1) | 2024.08.05 |
i2c 충돌나면 풀업저항 다는 게 제일 먼저 할 일 (1) | 2024.07.28 |
DS1302 아두이노 RTC 모듈 사용법 (2) | 2024.07.12 |
아두이노 0.96인치 OLED 디스플레이(SSD1306) 실습 (0) | 2024.07.04 |
UNO R4 WiFi BLE ② LPS22의 BLE 주변기기 (1) | 2024.06.18 |
더욱 좋은 정보를 제공하겠습니다.~ ^^