수행기록퀘스트4

Quest 4 제출 - 최종 결과물
2022. 9. 27 (화) 10:45 최종수정 2022. 9. 27 (화) 16:21 모도리 조회 1170 좋아요 1 스크랩 0 댓글 0

1. Pico W 장단점

  • 가격이 저렴하다.

  • 고성능 정수 연산(32Bit) 및 메모리
    1. Dual Core Arm Cotex-M0+ @133Mhz
    2. 264KB on-chip SRAM / 2MB on-board QSPI flash
  • 다양한 및 유연한 입출력 인터페이스
    1. 2.4GHz IEEE 802.11b/g/n wireless LAN 통한 외부장치 연결(IoT)
    2. 26 GPIO pins, including 3 analogue inputs
    3. 2 × UART / 2 × SPI controllers / 2 × I2C controllers / 16 × PWM channels
    4. 1 × USB 1.1 controller and PHY, with host and device support
    5. 8 × PIO state machines

2. 선택한 개발 툴(Arduino IDE)과 프로그래밍 언어의 장단점 및 특징

  • 통합환경(IDE) 제공
  • 다양한 I/O 장치 지원
  • 쉽게 동작시킬 수 있음
  • 여러 OS에서 사용이 가능
  • 사용하기가 편하다.

3. 사용하신 클라우드(ThingSpeak) 서비스의 장단점 밑 특징

  • 간단한 가입 절차 및 무료(일정부분)
  • 간단한 IoT 환경 구성

4. 프로젝트 결과물 제작 과정(회로도 / 소스) 및 리뷰

  • 프로젝트 아이디어 소개 및 개요

2.4GHz IEEE 802.11b/g/n wireless LAN 통한 외부장치 연결. 즉 IoT Cloud(ThingSpeak)구성 하여 공압 센서 데이터 값을 Uploading 한다.

  • 블록다이어그램

  • 회로도

    1. Pico W Analog Input Range 가 3.3V 여서, 앞 단에 전압 분배 회로 구성

5V×R10 ×R11R10+R11=3.3V

    1. PSE540 Output Range: 0~5V
    2. PSE540 Input 전압: 12~24V

  • Software 설치 및 Cloud 생성
    1. Arduino IDE 설치 및 Pico W 보드 및 라이브러리 추가 작업

[Arduino IDE 설치]

아직 다운로드 하지 않은 경우 Arduino IDE를 설치하십시오.

https://www.arduino.cc/en/software

  • 순서대로 진행 하면 된다!(화살표 및 박스표시)

 

?

?

바탕화면에 바로 가기 아이콘 생성 - 끝 -

[Arduino-Pico Setting]

Arduino-Pico 지원을 추가하십시오

https://github.com/earlephilhower/arduino-pico

설치는 공식 페키지가 아니라 JSON링크를 알려 주어야 한다.

File è 환경설정 에서 하부의 URLS에 위 링크를 추가해 주면 된다! è 확인

 

https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json

 

위 그림처럼 보드 매니저 지정을 해야 제대로 설정을 할 수 있습니다.

이제 보드 매니저에서 PICO라고 치면 Raspberry PI PICO 보드가 제대로 나옵니다. 물론 설치하면 됩니다. 크기가 좀 커서 시간이 오래 걸립니다.

설치가 마무리 되면 보드 설정에서 PICO 보드를 확인할 수 있습니다.

 

 

      1. 참조사이트:
      2. Pico W with the Arduino IDE | DroneBot Workshop
      3. 아두이노 개발 환경(IDE) 다운로드 설치.. : 네이버블로그 (naver.com)
    1. Com Port가 잡히지 않은 경우

“RPI RP2 USB Device" 확인

COM Port 설정하지 않은 상태에서 아두이노 예제(Blink) 업로드를 하면, 장치 관리자에서 “RPI RP2 USB Device”가 없어지고, 예제가 자동으로 업로드 되면서, “COM Port(Raspberry Pi Pico)”가 생성됩니다.  

 

    1. Com Port가 잡히지만, 예제 업로드가 안 되는 경우

USB 직렬 장치(COM61)에 업로드 하였으나 아래와 같은 메시지가 출력 되는 경우

 

Converting to uf2, output size: 130048, start address: 0x2000 No drive to deploy

BOOTSEL 버튼을 누른 상태로 USB 연결 -> “RPI RP2 USB Device” 가 보이는 상태에서 예제 업로드

-> “RPI RP2 USB Device”가 없어지고, 예제가 자동으로 업로드 되면서, “COM Port(Raspberry Pi Pico)”가 생성됩니다. 

 

    1. ThingSpeak 가입 및 IoT 생성

1.  thingSpeak.com으로 접속하여 회원가입을 진행합니다.

2.  Get Started 버튼을 클릭하세요.(화살표 참조)

https://blog.kakaocdn.net/dn/umcnF/btrsswrIaJR/TQ8wFTf95J3jpHmoGuK4Zk/img.png

3.  ' Create one! '을 클릭하여 새로운 계정 만들기로 들어갑니다.

https://blog.kakaocdn.net/dn/ZvYd4/btrsxD4FyCk/JMkrKaCnObBAlBi2o3hj70/img.png

4.  여러분의 'Email 주소'와 함께 관련 내용을 채우고 계속 진행해 주면, 쉽게 회원가입이 됩니다.

https://blog.kakaocdn.net/dn/bflOYX/btrsA7Rt4lr/Kwz5TCtRPwkNKCmfkkkZZ0/img.png


5.  가입 완료 후 등록 한 Email을(아이디) 넣고 로그인을 합니다. 그럼,  여러분들의 화면에는 비어있는 My Channels이 열리게 됩니다.

https://blog.kakaocdn.net/dn/buGSx2/btrswUTnrzD/Yl8du3wBuOJGkJa6DaOk2k/img.png

' New Channel '을 클릭하면 화면과 같은 프로젝트 채널을 하나씩 생성할 수 있습니다.

이미 생성된,  각 프로젝트를 클릭해서 열어보면, 아래처럼 설정한 항목들의 데이터가 보이는데요.
데이터를 보내는 하드웨어가 계속 작동 중이면, 데이터가 계속 수집 되게 됩니다. 


" Private " 채널은 본인만 확인할 수 있는 채널이며, " Public " 채널은 측정 데이터를 외부에 공개할 수 있는 채널입니다.
아래처럼, " Channel Settings "에서는 채널에서 측정하고자 하는 항목의 이름과 표시 방법을 정할 수 있습니다. 

https://blog.kakaocdn.net/dn/beLUza/btrsxIkk2Ne/VFDZoXviybhOf7Y25N6n11/img.png

" Sharing " 을 통해 데이터를 e-mail로 보낼 수 있고요,

https://blog.kakaocdn.net/dn/mDgR1/btrsxFnQ2j3/ZJKkoAXzoKJMhYn8tZbR71/img.png

/*

    This sketch establishes a TCP connection to a "quote of the day" service.

    It sends a "hello" message, and then prints received data.

*/

 

#include

 

 

#ifndef STASSID

#define STASSID "KOSES04F"

#define STAPSK "koses04f"

#endif

 

const char* ssid = STASSID;

const char* password = STAPSK;

 

const char* host = "api.thingspeak.com";

const char* APIKey = "J9O6E7IXXXXXXX";

const uint16_t port = 80;               //const uint16_t port = 17;

 

int sensorPin = A0;     // select the input pin for the Vaccum Sensor

int sensorValue = 0;    // variable to store the value coming from the sensor

float vaccum = 0;       // Convertr raw data to KPa

WiFiMulti multi;

 

void setup()

{

    // declare the ledPin as an OUTPUT:

    pinMode(LED_BUILTIN, OUTPUT);

    Serial.begin(115200);

    delay(10);

 

    // We start by connecting to a WiFi network

 

    Serial.println();

    Serial.println();

    Serial.print("Connecting to ");

    Serial.println(ssid);

 

    multi.addAP(ssid, password);

 

    if (multi.run() != WL_CONNECTED)

    {

        Serial.println("Unable to connect to network, rebooting in 10 seconds...");

        delay(10000);

        rp2040.reboot();

    }

 

    Serial.println("");

    Serial.println("WiFi connected");

    Serial.println("IP address: ");

    Serial.println(WiFi.localIP());

}

 

void loop()

{

    static bool wait = false;

 

    // read the value from the sensor:

    sensorValue = analogRead(sensorPin);   

    vaccum = (sensorValue / 10.23);

    Serial.print("Raw data:");

    Serial.println(sensorValue);

   

    Serial.print("Vaccum:");

    Serial.println(vaccum);

 

   // turn the ledPin on

   if((sensorValue)<500)

      digitalWrite(LED_BUILTIN, HIGH);

   else

      digitalWrite(LED_BUILTIN, LOW);

 

    Serial.print("connecting to ");

    Serial.print(host);

    Serial.print(':');

    Serial.println(port);

 

   

 

    // Use WiFiClient class to create TCP connections

    WiFiClient client;

    if (!client.connect(host, port))

    {

        Serial.println("connection failed");

        delay(5000);

        return;

    }

   

 

    // We now create a URI for the request

    String url = "/update";

    url += "?api_key=";

    url += APIKey;

    url += "&field1=";

    url += vaccum;

 

    Serial.print("Requesting URL: ");

    Serial.println(url);

 

    // This will send a string to the server

    Serial.println("sending data to server");

    if (client.connected())

    {

//    client.println("hello from ESP8266");

        client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");

    }

 

    // wait for data to be available

    unsigned long timeout = millis();

    while (client.available() == 0)

    {

        if (millis() - timeout > 5000)

        {

            Serial.println(">>> Client Timeout !");

            client.stop();

//            delay(60000);

            delay(5000);

            return;

        }       

    }

 

    // Read all the lines of the reply from server and print them to Serial

    Serial.println("receiving from remote server");

    // not testing 'client.connected()' since we do not need to send data here

    while (client.available())

    {

        char ch = static_cast(client.read());

        Serial.print(ch);

    }

 

    // Close the connection

    Serial.println();

    Serial.println("closing connection");

    client.stop();

 

    if (wait)

    {

//        delay(300000);  // execute once every 5 minutes, don't flood remote service

        delay(10000);  // execute once every 5 minutes, don't flood remote service

    }

    wait = true;

 

}

  1. 예제 불러오기(파일 / 예제 / WiFi / WiFiClient

 

 

 

 

 

 

 

 

 

  1. “your-ssid” 설정
  2. “your-password” 설정

 

 

 

 

 

  1. ç추가
  2. ç추가 è개인 고유 KEY
  3. Port 값 변경

 

  1. Analog Pin 설정
  2. Analog 전역변수 선언
  3. Analog 값 변환 전역변수 선언

 

 

 

 

 

  1. Analog Value Indicator LED Setting
  2. Serial Monitoring Setting

 

 

 

 

 

 

 

 

 

  1. Network Setting and Linkage

 

 

 

 

 

 

 

 

  1. 서버 연결 완료 및 Client 정보 표시

 

 

 

 

 

 

 

 

 

 

 

  1. Analog Read(0~1023)
  2. Kpa 값으로 변환

 

 

 

 

 

 

 

  1. sensorValue 값이 500 기준에 따른 표시

 

 

 

  1. Server 연결 정보 표시

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Cloud 에 보낼 정보

 

 

 

 

  1. Client 에서 얻은 값

 

 

 

 

 

 

 

 

 

  1. ç추가작업 : 정보 송신

 

 

 

  1. 정보 업 로딩 시간 설정

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. 시리얼 모니터 출력결과

  1. ThingSpeak

Sensor Data Chart Display

Show Channel Location

Field 1 Gauge Options

Field 1 Value Options

https://blog.kakaocdn.net/dn/mDgR1/btrsxFnQ2j3/ZJKkoAXzoKJMhYn8tZbR71/img.png

Sharing 을 통해 데이터를 e-mail로 보낼 수 있다.

https://blog.kakaocdn.net/dn/bbveM8/btrsA50QVfN/klUmHYTF5x5nf8b48dh7qk/img.png

"Export recent data"를 통해 최근의 데이터를 Json, XML, CSV 등의 파일로 저장하여 활용할 수 있습니다

https://blog.kakaocdn.net/dn/brEdjW/btrsxgI4EJU/xUKQs8EAmEWKcjgqapVSc0/img.png

스마트폰용 앱을 설치해서 데이터를 확인해 볼수 있다.

“ThingView-ThingSpeak viewer”

https://blog.kakaocdn.net/dn/bjldxm/btrsyGUj4ms/WEkvPZH2kFD6htBubjthLk/img.png

 

5. 최종 결과(소감)

Pico W2.4GHz IEEE 802.11b/g/n wireless LAN 통한 외부장치(Sensor) 연결하여, 즉 IoT Cloud(ThingSpeak)구성 하여 각종 데이터 값을 Uploading(수집) 할 수 있다는 것에 매우 흥미로웠다. 또한 ThingSpeak IoT 플랫폼 또한 매우 간결하게 디바이스와 데이터를 주고받을 수 있는 환경을 제공하여 본 콘테스트(“Pico W 기초부터 클라우드 연동까지!”)를 통하여 다양하고 새로운 경험 및 진행할 수 있는 기회를 주셔서 감사 드립니다.

향후 다양한 IoT Maker 교류가 이루어 지는 동시에, 여러 산업에 적용될 거라 기대 합니다.

 

6. 테스트 동영상

첨부파일 참고

[콘테스트 실험환경]

실제로는 PSE540 공압센서에 직접 공압를 연결해야 하는 환경이 안 되여 가변저항을 연결하여 테스트 및 시연을 하였음을 알려 드립니다.

첨부파일
Pico W.zip 다운로드

로그인 후
참가 상태를 확인할 수 있습니다.