7/05/2022

PMS7003M 아두이노(#305)

>> PMS7003M + 아두이노 메가2560 시리얼3 연결


/*
 * pms7003
 * 메가2560 사용하는 경우 Serial3 사용.
 */
 
#define START_1 0x42  
#define START_2 0x4d  

#define DATA_LENGTH_H        0  
#define DATA_LENGTH_L        1  
#define PM1_0_ATMOSPHERE_H   8  
#define PM1_0_ATMOSPHERE_L   9  
#define PM2_5_ATMOSPHERE_H   10  
#define PM2_5_ATMOSPHERE_L   11  
#define PM10_ATMOSPHERE_H    12  
#define PM10_ATMOSPHERE_L    13  

#define PM2_5_PARTICLE_H   16  
#define PM2_5_PARTICLE_L   17  

#define VERSION              26  
#define ERROR_CODE           27  
#define CHECKSUM             29  

byte bytCount1 = 0;  
byte bytCount2 = 0;  

unsigned char chrRecv;  
unsigned char chrData[30];  
int PM01;  
int PM25;  
int PM10;  

bool g_bIsEnableDutSensor = false;

bool isEnableDustSensor()
{
  return g_bIsEnableDutSensor;
}

int getPM01()
{
  return PM01;
}
int getPM25()
{
  return PM25;
}
int getPM10()
{
  return PM25;
}

unsigned int GetPM_Data(unsigned char chrSrc[], byte bytHigh, byte bytLow)  
{  
   return (chrSrc[bytHigh] << 8) + chrSrc[bytLow];  
}  
 
void init_pms7003m()
{  
  Serial.println("PMS7003 Ready ");  
  Serial3.begin(9600);
  g_bIsEnableDutSensor=true;
}  

void update_pms7003m()
{  
  if (Serial3.available())  
  {  
       for(int i = 0; i < 32; i++)     {  
           chrRecv = Serial3.read();  
           if (chrRecv == START_2 ) {  
              bytCount1 = 2;  
              break;  
            }  
       }  
      if (bytCount1 == 2)  
      {  
         bytCount1 = 0;  
         for(int i = 0; i < 30; i++){  
            chrData[i] = Serial3.read();  
         }  
 
         if ( (unsigned int) chrData[ERROR_CODE] == 0 )
         {  
            PM01  = GetPM_Data(chrData, PM1_0_ATMOSPHERE_H, PM1_0_ATMOSPHERE_L);  
            PM25  = GetPM_Data(chrData, PM2_5_ATMOSPHERE_H, PM2_5_ATMOSPHERE_L);  
            PM10  = GetPM_Data(chrData, PM10_ATMOSPHERE_H, PM10_ATMOSPHERE_L);  
            //
            Serial.print("PM1.0=");  
            Serial.print(PM01);  
            Serial.print(",PM2.5=");  
            Serial.print(PM25);  
            Serial.print(",PM10=");  
            Serial.println(PM10);  
            }  
         else
         {  
            Serial.println("PMS7003  ERROR");  // 잦은 요청때문에 발생됨. 무시됨.
            g_bIsEnableDutSensor = false;
         }  
      }  
   }  
   else
   {  
      //Serial.println("PMS7003 NOT available");  
      //g_bIsEnableDutSensor = false;
   }  
}  

 


7/04/2022

NRF24L01 아두이노

>>NRF24L01 송신, 수신 

 

핀구성도.

NRF24L01 Pinout & NRF24L01+ PA LNA .png 

 

아두이노 라이브러리 파일.

http://allfirstedu.ipdisk.co.kr:8000/pds/arduinoLib/RF24-master.zip

다운로드 파일을 문서 디렉터리의 Arduino\libraries 에 압축 해제 합니다.

문서/Arduino/libraries/RF24-master

 

>> SPI 통신 모듈입니다.

주의사항: 아두이노 보드의 3.3V 연결해서 사용해보도록 합니다.

아두이노 우노, 나노 보드에 사용하는 경우 동일한 spi 포트입니다.


ArduinoSCKMISOMOSISS
Uno13121110
Nano13121110
Mega52505153


 

>> 연결 다이어그램 참조


NRF24L01 and Arduino Tutorial Circuit Schematic

>> 송신 코드, Transmitter Code

/* * Arduino Wireless Communication Tutorial * Example 1 - Transmitter Code * * by Dejan Nedelkovski, www.HowToMechatronics.com * * Library: TMRh20/RF24, https://github.com/tmrh20/RF24/ */ #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> RF24 radio(7, 8); // CE, CSN const byte address[6] = "00001"; void setup() { radio.begin(); radio.openWritingPipe(address); radio.setPALevel(RF24_PA_MIN); radio.stopListening(); } void loop() { const char text[] = "Hello World"; radio.write(&text, sizeof(text)); delay(1000); }

 

>> 수신 코드, Receiver Code

/* * Arduino Wireless Communication Tutorial * Example 1 - Receiver Code * * by Dejan Nedelkovski, www.HowToMechatronics.com * * Library: TMRh20/RF24, https://github.com/tmrh20/RF24/ */ #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> RF24 radio(7, 8); // CE, CSN const byte address[6] = "00001"; void setup() { Serial.begin(9600); radio.begin(); radio.openReadingPipe(0, address); radio.setPALevel(RF24_PA_MIN); radio.startListening(); } void loop() { if (radio.available()) { char text[32] = ""; radio.read(&text, sizeof(text)); Serial.println(text); } }