>

인터넷을 통해 LED를 제어하는 ​​블루투스와 Arduino 스케치를 사용합니다. 문제는 블루투스와 인터넷을 통해 Arduino LED를 제어 할 수 있도록 두 스케치를 결합하고 싶습니다. 그렇게 할 수 있습니까?


  • 답변 # 1

    내가 당신이라면, "하드웨어"와 "소프트웨어"를 분리 할 것입니다. 이것은 매우 흥미로운 "패턴"입니다. 거의 모든 운영 체제에서 사용되어 전 세계 장치와의 호환성을 보장합니다.

    어떻게?

    계층

    "OSI 모델"은 일반적으로 몇 개의 레이어를 설명합니다. 그러나 나에게 가장 흥미로운 부분은 "호스트 레이어"와 "미디어 레이어"의 차이점입니다.

    미디어 레이어

    미디어 계층은 일반적으로 비트 전송, 주소 지정 및 데이터 충돌을 처리합니다. "인터넷"에서는 최종 애플리케이션에서 눈에 띄지 않고 구리에서 글래스 파이버로 '간단하게'변경할 수 있습니다 (더 빠름은 제외).

    호스트 레이어

    호스트 계층, PC 또는 네트워크 어댑터에 관계없이 프로그램이 제대로 실행됩니다 (이 추상화/통합이 제대로 수행 된 경우).

    이것을 적용

    어떻게 적용합니까? 기본적으로 작은 응용 프로그램입니다.

    우리는 호스트가 어떤 미디어 (레이어)를 사용하고 있는지 신경 쓰지 않기를 원합니다. Arduino는 사용중인 미디어 레이어를 구성하거나 감지 할 수 있어야합니다.

    이와 같은 일이 필요합니다 (실제 코드가 아니며 의사 코드 임) :

    String messageBuffer = "";
    void Setup(){
       setupWifi(pin1,pin2);
       setupBluetooth(pin3,pin4);
    }
    void Loop(){
       messageBuffer = getWifiMessage();
       handleMessage(messageBuffer);
       messageBuffer = getBluetoothMessage();
       handleMessage(messageBuffer);
    }
    
    

    이것을 올바르게 설정하면 버퍼 처리 코드를 한 번만 작성하면됩니다. 매우 유용합니다! 버퍼를 유발하는 모든 논리/효과와 함께 버퍼를 처리하는 것은 확실해야합니다. WiFi를 사용할 때와 마찬가지로 Bluetooth를 사용할 때 다른 동작을 원하지 않을 것입니다. 웹 브라우저가 구리를 사용할 때만 작동하지만 glasfiber를 사용할 때는 작동하지 않는다고 상상해보십시오. :)

    프로토콜

    Wi-Fi와 블루투스의 메시지는 정확히 같아야합니다. 이렇게하면 서로 다른 두 가지 프로토콜을 다룰 필요가 없으며 다른 쪽 (제어)에서이를 구현하는 것이 더 쉬울 것입니다.

    좋은 프로토콜/메시지는 다음과 같습니다 :

    "@ 12 # 13,255,255,0;"

    @를 시작 표시로 사용합니다. 어디서부터 시작해야하는지 알기 때문에이 기능은 매우 유용합니다.

    다음에 따라야 할 규칙을 정해야합니다 (예를 들어 @와 # 사이에 설정된 문자 수는 "주소"를 나타냅니다. 여러 장치로 보낼 때만 이 예제에서는 장치 12가 반응합니다. 이것은 종종 블루투스 또는 Wi-Fi에 의해 처리되지만 고유 한 헤더를 갖는 것이 좋을 수 있습니다. 귀하의 메시지.

    메시지 ID는 유용합니다. "LED 밝기"또는 "디버그 요청"또는 "출력 설정"에 대해 다른 유형의 메시지를 원합니다.

    각 메시지마다 x 개의 매개 변수가있을 수 있으므로이를 분리하는 것이 더 좋습니다. 최대 매개 변수 수와 이들이 유발할 동작을 지정하는 것이 중요합니다.

    일부 프로토콜은 설정된 길이를 사용하지만 끝 구분 기호 ";" 다른 기기에서 메시지가 완전히 수신되었음을 알리는 가장 좋은 방법입니다.

    일부 메모

    기존의 프로토콜을 목표로하세요. 기기가 호환되고 다른 프로토콜을 만드는 것이 특별히 유용하지 않으면 멋질 것입니다.

    전송 가능한 텍스트에 시작/끝 구분 기호가 포함되어 있지 않다는 점에 유의하십시오. 이 경우 메시지 길이 또는 제외/포함을 사용할 수 있습니다.

    프로토콜이 오버 헤드를 추가한다는 것에주의하십시오. 그러나 일반적으로 메시지를 "읽을"수 있으면 핸들러를 프로그래밍하거나 일반적으로 작업하기가 훨씬 쉬워집니다.

    메시지가 완전히 수신되었고 오류가 없는지 확인하십시오. 오류가있는 경우 시스템이이를 처리 할 수 ​​있고이를 알리는 메시지로 응답하는지 확인하십시오. 어떤 경우에도 시스템이 오류로 잠기거나 반응을 제공하지 않아야합니다 (디버깅을 어렵게 함).

    서버

    물건을 보내는 모든 기기에서 블루투스 및/또는 WiFi가 있어야합니다. 블루투스는 매우 쉽고 빠르게 시작할 수 있습니다.

    WiFi를 사용하는 경우 기기에서 TCP/IP 연결을 할 수 있는지 확인해야합니다. TCP/IP는 기본적으로 인터넷을 통해 메시지를 보내기위한 "쉘"입니다 .D 깔끔한 주소 지정 및 오류 검사 기능이 내장되어 있습니다 (그러나 수신자 사이에 오류가 없는지 100 % 확신 할 수는 없습니다) 아두 이노).

    하지만 왜?

    Wi-Fi 및 블루투스 (및 가능한 USB, rf, 이더넷 등)에 대한 처리기 및 프로토콜 사양을 작성해야하는 방법을 배우는 것이 유용 할뿐입니다. 그 외에도 임베디드 시스템에서는 다른 물리 계층에 다른 핸들러를 사용하면 모호한 특정 오류가 발생하여 프로그램 논리가 손상 될 수 있습니다. 또한 더 많은 사람들이 프로토콜/응용 프로그램을 사용/검토하면 제대로 작동하는지 더 확실하게 알 수 있습니다.

  • 답변 # 2

    반응에서 판단하면 WiFi/블루투스/이더넷 쉴드

    Arduino에는 내장 Bluetooth 또는 이더넷이 없습니다. 문제는 소프트웨어로 조금 바뀌고 있지만 괜찮습니다.

    1. 이더넷/블루투스 수신기로 PC 사용

    PC를 수신기로 사용할 수 있습니다.

    네트워크 용어로 말하면 휴대 전화는 "클라이언트"가되고 PC는 "서버"가됩니다.

    PC에서 처리를 "서버"로 사용하는 것이 좋습니다. 처리 과정에서 Arduino에 쉽게 연결할 수 있습니다.

    PC의 블루투스를 사용하거나 블루투스 장치를 Arduino와 같은 직렬 장치처럼 보이게하는 "블루투스 COM 포트"를 설정하기 만하면됩니다.

    하지만 약간의 캐치가 있습니다. 처리는 TCP/IP 연결을 쉽게 설정할 수 있습니다. 귀하의 휴대 전화에서 이것은 조금 덜 간단 할 수 있습니다. 브라우저는 일반적으로 HTTP를 사용하여 연결합니다.

    처리 과정에서 HTTP를 구현하거나 TCP/IP 메시지 전송을 지원하는 앱을 만들거나 사용해야합니다.

  • 답변 # 3

    MIT 앱 Inventor (http://appinventor.mit.edu/explore/또는 http://www.appinventor.org/) 또는 나만의 앱을 만든 후 스마트 폰에서 Arduino의 모든 결과에 액세스 할 수 있습니다.

  • 이전 arduino - 올바른 연결 - 공통 양극이있는 7- 세그먼트, 4 자리 디스플레이
  • 다음 arduino - 두 기능 리셋 버튼 - 길게/짧게 누름