Pico W 기초부터 클라우드 연동까지!
콘테스트 프로젝트완료

web server test

Pico W 기초부터 클라우드 연동까지!
2022.07.22에 시작
2
좋아요
2.5K
조회
0
댓글
web server test

사용 기술

Raspberry PiSoftware
Pico W 기초부터 클라우드 연동까지!완료
콘테스트 프로젝트 진행 상황

각 Quest를 단계적으로 완성하는 프로젝트입니다.

Quest 1
Quest 2
Quest 3
Quest 4
4 / 4 완료
Quest 1: web server 기반 알람
2022.08.08
완료

# 아이디어 소개 및 개요

0. 개요 : 공장 자동화시스템의 각종 센서 알람 기능

1. 통신 매체 : web server 기반(와이파이) 알람 (Wi-Fi, Tcp / IP or UDP)

2. 외부 아날로그 데이터(산업용 공압 센서)를 실시간으로 측정하여 상태값을 표현 하며, 이상 값 감지시 사용자에게 알람 신호를 준다.

   - 공압센서 및 온도등 다양한 센서 값 사용

3. 알람 방식은 PC 디스플레이 및 LED 점등, 또는 부저등을 이용 할 수 있다.

# 전체 구조를 표현 하는 블록 다이어그램

# 하드웨어 구성 다이어그램

-. PC ( Dest top or Note Book) + Pico W + LED + Buzzor + 압력센서

 

# 소프트웨어 구성 다이어그램

-. C# ,  arduino

결론 : Sensor 값을 읽어서 실시간 web 서보에 전달한다.  sensor값이 임의의  여러 기준값에 따라 해당값에 따른 디지털 출력(LED)한다.

Quest 2: 개발환경구성 (툴 설치 및 클라우드환경 설정)
2022.08.25
완료

개발 툴및 클라우드 설정은 2가지 를 해봄

1.  arduino IDE 및 arduino IoT Cloud

 

2.  micropython IDE 및 Azure IoT Cloud 환경 구성

Quest 3: Pico W - 클라우드 연결 및 데이터 업로드
2022.09.07
완료

Thonny 및 Azure IoT 가 잘 안되서 다음과 같이 바꾸어서 실행을 하였습니다. 

Arduino IDE 및 ThingSpeak IoT를 이용하였습니다.

 

1. IoT 클라우드 서비스에 대한 계정이 활성화된 상태(로그온)을 확인할 수 있는 캡쳐본을 제출하세요

 

2. IoT 클라우드와 연결된 Pico W 사물의 이름 설정 등 IoT 연결 과정을 설명해 주세요.

==> 시험용으로 우선 간단하게 "ADC" Channel Name 생성 및 한개의 "Temp"필드만 명명하였다. 

    Arduino 프로그램에서는 Temp 값을 임의의 증가 형식으로 업데이트 하게 함.

3. IoT 클라우드에 업로드된 데이터 상태가 확인되는 대시보드 화면을 캡쳐하여 제출하세요.

 

 

Quest 4: Quest 4 제출 - 최종 결과물
2022.09.27
완료

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 공압센서에 직접 공압를 연결해야 하는 환경이 안 되여 가변저항을 연결하여 테스트 및 시연을 하였음을 알려 드립니다.

프로젝트 자료실

프로젝트를 재현하거나 학습하는데 필요한 모든 자료를 제공합니다.

등록된 자료가 없습니다.

프로젝트 소개

사용 기술
Raspberry PiSoftware

코드 & 회로도

등록된 코드/회로 자료가 없습니다.

댓글 0

아직 댓글이 없습니다. 첫 댓글을 남겨보세요!