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); } }

 

 

 

 


 

 

 

6/28/2022

자바스프링 부트 기초1 build.gradle


>> Gradle 파일 설정값


1. developmentOnly : Gradle의 developmentOnly는 개발환경에만 적용되는 설정이다.

운영환경에 배포되는 jar, war 파일에는 developmentOnly로 설치된 라이브러리는 제외된다. 


2. compileOnly : 해당 라이브러리가 컴파일 단계에서만 필요.

3. annotationProcessor : 컴파일 단계에서 애너테이션을 분석하고 처리하기 위해 사용함. 

4. runtimeOnly : compileOnly와 반대되는 개념. 해당 라이브러리가 Runtime 시에만 필요한 경우에 사용. 


5. implementation : 해당 라이브러리 설치를 위해 일반적으로 사용하는 설정. implemetation은 해당 라이브러리가 변경되더라도 이 라이브러리와 연관된 모든 모듈들을 컴파일하지 않고 직접 관련이 있는 모듈들만 컴파일하기 때문에 rebuild 속도가 빠르다

6/26/2022

Redis 서버 설치

>> github 

https://github.com/microsoftarchive/redis/releases

 

redis 서버 실행


.\redis-server.exe redis.windows.conf

 

redis 코드 분석. 


>> 자바스프링.

implementation 'org.springframework.boot:spring-boot-starter-data-redis'
 

dev 또는 application.yml 

spring:
  cache:
    redis:
      time-to-live: 86400000 #mills 단위 -> [1초 : 1000] ->   [1일 : 86400000]

  redis:
    port: 6379 #설정한 포트번호
    host: 127.0.0.1

 

@EnableCaching



6/22/2022

윈도우 80포트 중지 제거

>> 80 포트를 사용하는 여러가지 서비스를 모두 중지.

명령어 프롬프트 관리자 모드 실행 후.


NET stop HTTP

 
Microsoft Windows [Version 10.0.22000.739]
(c) Microsoft Corporation. All rights reserved.

C:\WINDOWS\system32>NET stop HTTP
다음 서비스는 HTTP Service 서비스에 영향을 받습니다.
HTTP Service 서비스를 멈추면 다음 서비스도 멈추어 집니다.

World Wide Web Publishing 서비스
SSDP Discovery
Print Spooler
Function Discovery Resource Publication
Function Discovery Provider Host

이 작업을 계속하시겠습니까? (Y/N) [N]: Y
World Wide Web Publishing 서비스 서비스를 멈춥니다..
World Wide Web Publishing 서비스 서비스를 잘 멈추었습니다.

SSDP Discovery 서비스를 멈춥니다..
SSDP Discovery 서비스를 잘 멈추었습니다.

Print Spooler 서비스를 멈춥니다..
Print Spooler 서비스를 잘 멈추었습니다.

Function Discovery Resource Publication 서비스를 멈춥니다..
Function Discovery Resource Publication 서비스를 잘 멈추었습니다.

Function Discovery Provider Host 서비스를 멈춥니다..
Function Discovery Provider Host 서비스를 잘 멈추었습니다.

HTTP Service 서비스를 멈춥니다.........
HTTP Service 서비스를 멈추지 못했습니다.


C:\WINDOWS\system32>NET stop HTTP
서비스를 시작하거나 멈추고 있습니다. 나중에 다시 하십시오.


C:\WINDOWS\system32>
 
>> 정상적으로 80 포트를 사용 가능.