Wi-Fi 및 Bluetooth 모듈 포함.

아두이노 우노모든 것에 WiFi 제공 편리한 조작마이크로 컨트롤러 포함: 14개의 디지털 입력/출력(그 중 6개는 PWM 출력으로 사용 가능), 6개의 아날로그 입력, USB 커넥터, 전원 커넥터, ICSP(회로 내 프로그래밍 커넥터) 및 마이크로 컨트롤러 재설정 버튼.

보드의 하이라이트는 ESP8266 WiFi 모듈로 Arduino가 다음을 통해 다른 모듈과 통신할 수 있습니다. 무선 네트워크 802.11 b/g/n 표준.

ESP8266을 사용하면 USB 케이블을 사용하지 않고 OTA(Firmware Over The Air) 모드에서 Arduino 보드를 플래시할 수 있습니다.

보드의 비디오 검토

연결 및 설정

시작하려면 아두이노 보드수술실에서 우노 와이파이 윈도우 시스템 다운로드 및 설치 Arduino 통합 개발 환경 - Arduino IDE.

문제가 발생했습니까?

WiFi 모듈 구성

WiFi를 통한 Arduino 펌웨어

Arduino Uno WiFi에는 OTA(Firmware Over The Air) 모드에서 USB 케이블을 사용하지 않고 스케치를 업로드할 수 있는 기능이 있습니다. 이 작업을 수행하는 방법을 자세히 살펴보겠습니다.


이렇게 하려면 메뉴를 입력하십시오. 도구 포트 올바른 포트를 선택하십시오.

WiFi를 통해 Arduino를 플래시하고 있으므로 보드는 다음과 같이 정의됩니다. 원격 장치 IP 주소로

환경이 구성되고 보드가 연결됩니다. 스케치 다운로드를 진행할 수 있습니다. Arduino IDE에는 많은 목록이 포함되어 있습니다. 기성품 예, 어떤 문제의 해결책을 엿볼 수 있습니다. LED 깜박임 - 스케치 "Blink"의 예 중에서 선택합시다.
프로그램 다운로드 아이콘을 클릭하여 보드를 플래시합니다.
로드 후 LED가 초당 한 번 깜박이기 시작합니다. 이것은 모든 일이 잘 풀렸다는 것을 의미합니다.

이제 당신은 갈 수 있습니다 사용 사례 .

사용 예

웹 서버

아날로그 입력의 현재 값이 포함된 페이지를 표시하는 간단한 웹 서버를 설정해 보겠습니다.

웹서버.이노 /* Arduino Uno WiFi에서 실행되는 간단한 웹 서버의 예. 서버는 아날로그 입력 값을 표시하고 2초마다 정보를 업데이트합니다. http://에서 서버에 액세스 /arduino/webserver/ 이 예제는 Arduino Uno WiFi 개발자 에디션에서만 작동합니다. */#포함 #포함 void setup() ( Wifi.begin () ; Wifi.println ("웹 서버가 작동 중입니다") ; // wifi-console에서 서버 시작에 대한 메시지를 표시합니다.) 무효 루프() ( while (Wifi.available () ) ( process(Wifi) ; ) delay(50 ) ; ) 무효 프로세스(WifiData 클라이언트) ( 문자열 명령 = client.readStringUntil ("/" ) ; if (명령 = = "webserver" ) ( WebServer(client) ; ) ) void WebServer(WifiData 클라이언트) ( client.println ( "HTTP/1.1 200 OK" ) ; client.println ( "콘텐츠 유형: text/html" ) ; 클라이언트. println ("연결: 닫기" ) ;client.println ("새로 고침: 2" ) ; // 페이지 새로고침 주기를 초 단위로 설정하는 제목클라이언트.println(); client.println(" " ) ; // 페이지 구성클라이언트.println( " UNO WIFI 웹서버 " ) ; 클라이언트.인쇄( "

아날로그 핀에서 값을 출력하는 예

"
) ; client.print("
    " ), (int analogChannel = 0 ; analogChannel< 4 ; analogChannel++ ) { int sensorReading = analogRead(analogChannel) ; client.print ("
  • 아날로그 입력 ") ; client.print(analogChannel); client.print(": " ) ; client.print(sensorReading) ; client.print("
  • " ) ; ) 클라이언트.println("
" ), 클라이언트.프린트(DELIMITER) ; // 연결을 닫는 것을 잊지 마십시오! }

보드 요소

마이크로컨트롤러 ATmega328P

Arduino Uno WiFi 플랫폼의 핵심은 8비트 AVR 마이크로컨트롤러인 ATmega328P입니다.

마이크로컨트롤러 ATmega16U2

ATmega16U2 마이크로컨트롤러는 ATmega328P 마이크로컨트롤러를 컴퓨터의 USB 포트에 연결합니다. PC에 연결하면 Arduino Uno WiFi는 가상 COM 포트로 정의됩니다. 16U2 펌웨어는 표준 USB-COM 드라이버를 사용하므로 외부 드라이버를 설치할 필요가 없습니다.

전원 핀

    빈:외부 전원 공급 장치의 전압(USB 또는 기타 안정화된 전압의 5V와 관련 없음). 이 출력을 통해 외부 전원을 공급하고 외부 어댑터가 장치에 연결되어 있으면 전류를 소비할 수 있습니다.

    5V:출력은 보드 안정기에서 5V의 전압을 받습니다. 이 안정기는 ATmega328 마이크로컨트롤러에 전원을 공급합니다. 5V 출력을 통해 장치에 전원을 공급하는 것은 권장하지 않습니다. 이 경우 전압 안정기가 사용되지 않아 보드가 고장날 수 있습니다.

    3.3V:보드 레귤레이터에서 3.3V. 최대 출력 전류는 1A입니다.

    접지:근거 결론.

    아이오레프:핀은 확장 보드에 마이크로컨트롤러의 작동 전압에 대한 정보를 제공합니다. 전압에 따라 확장 보드는 적절한 전원 공급 장치로 전환하거나 레벨 변환기를 사용하여 5V 및 3.3V 장치 모두에서 작동할 수 있습니다.

입출력 포트

    디지털 입력/출력:핀 0 - 13
    논리 레벨 1은 5V, 0은 0V입니다. 최대 출력 전류는 40mA입니다. 풀업 저항은 기본적으로 비활성화되어 있지만 소프트웨어로 활성화할 수 있는 핀에 연결됩니다.

    PWM:핀 3, 5, 6, 9, 10 및 11
    8비트 아날로그 값을 PWM 신호로 출력할 수 있습니다.

    ADC:핀 A0 - A5
    6개의 아날로그 입력, 각 입력은 아날로그 전압을 10비트 숫자(1024개 값)로 나타낼 수 있습니다. ADC의 비트 깊이는 10비트입니다.

    TWI/I²C: SDA 및 SCL 핀
    2선을 통해 동기식 프로토콜을 사용하여 주변 장치와 통신합니다. 작동하려면 Wire 라이브러리를 사용하십시오.

    SPI:핀 10(SS) , 11(MOSI) , 12(MISO) , 13(SCK) .
    이 핀을 통해 SPI 인터페이스를 통해 통신이 수행됩니다. 작동하려면 SPI 라이브러리를 사용하십시오.

    UART:핀 0(RX) 및 1(TX)
    이 핀은 USB-UART 변환기 역할을 하는 ATmega16U2 마이크로 컨트롤러의 해당 핀에 연결됩니다. Serial 클래스를 통해 Arduino 보드를 컴퓨터 또는 기타 장치와 통신하는 데 사용됩니다.

LED 표시

USB Type-B 커넥터

USB Type-B 커넥터는 컴퓨터를 사용하여 Arduino Uno WiFi 플랫폼을 플래시하도록 설계되었습니다.

외부 전원 공급용 커넥터

연결용 커넥터 외부 전원 공급 장치 7V ~ 12V

5V 전압 조정기

보드가 외부 전원 공급 장치에 연결되면 전압이 MPM3610 레귤레이터를 통과합니다. 안정기 출력은 5V 핀에 연결됩니다. 최대 출력 전류는 1A입니다.

3.3V 전압 조정기

3.3볼트 출력의 MPM3810GQB-33 안정기. ESP8266 WiFi 모듈에 전원을 공급하고 3.3V 핀으로 출력됩니다. 최대 출력 전류는 1A입니다.

ATmega328P용 ICSP 커넥터

ICSP 커넥터는 ATmega328P 마이크로컨트롤러의 회로 내 프로그래밍을 위한 것입니다. SPI 라이브러리를 사용하여 이 핀은 SPI 인터페이스를 통해 확장 보드와 통신할 수 있습니다. SPI 라인은 6핀 커넥터로 라우팅되며 디지털 핀 10(SS), 11(MOSI), 12(MISO) 및 13(SCK)에도 복제됩니다.

ATmega16U2용 ICSP 커넥터

ICSP 커넥터는 ATmega16U2 마이크로컨트롤러의 회로 내 프로그래밍을 위한 것입니다.

그래서 우리는 두 개의 가역(양방향 회전) 엔진, 즉 주 엔진과 조향 엔진을 제어할 것입니다. 3.7V 배터리로 전원을 공급해 드리지만, 컨트롤러의 전원 공급에 동의하시거나 별도의 배터리로 정리하시면 원칙적으로 최대 12V까지 공급이 가능합니다.

전원 섹션에서는 가장 간단한 소형 드라이버를 사용합니다. 스테퍼 모터 l9110s 또는 L293 \ 8에서 어셈블리를 사용할 수 있습니다. 또는 당신이 찾을 수 있는 동등하게 강력한 것. 일반적으로 그림의 모든 것을 그렸습니다.

aliexpress에서 프로젝트의 구성 요소를 구입할 수 있습니다.

내가 좋아하는 WiFi 컨트롤러 사용 노드MCU 0.9 ESP8266, 하지만 당신은 또한 사용할 수 있습니다 더 작은 크기위모스 D1 미니.

배터리는 마이크로 USB를 통해 충전할 수 있으며, 그 후에는 모터 드라이버에 직접 전원을 공급하고 WiFi 컨트롤러를 통해 WiFi 컨트롤러에 전원을 공급합니다. 부스트 컨버터를 5V로.

프로그램 코드:

#포함
const char* ssid = "와이파이 네트워크 이름";
const char* password = "네트워크 비밀번호";
정수 위로 = 2; //이산 출력의 수
정수 아래로 = 14;
정수 왼쪽 = 4;
정수 오른쪽 = 12;
// 서버 인스턴스 생성
// 수신 대기할 포트를 인수로 지정
WiFi서버 서버(80);
무효 설정()(
Serial.begin(9600);
지연(10);
//출력 준비
핀모드(위쪽, 출력);
디지털 쓰기(위쪽, 0);
핀모드(다운, 출력);
디지털 쓰기(아래로, 0);
핀모드(왼쪽, 출력);
디지털 쓰기(왼쪽, 0);
핀모드(오른쪽, 출력);
디지털 쓰기(오른쪽, 0);

// 와이파이 네트워크에 연결
직렬.println();
직렬.println();
Serial.print("연결 중");
직렬 println(ssid);

wifi.begin(ssid, 비밀번호);

동안 (WiFi.status() != WL_CONNECTED) (
지연(500);
Serial.print(".");
}
Serial.println("");
Serial.println("와이파이 연결됨");

//서버 시작
server.begin();
Serial.println("서버 시작");
//포트 모니터에 IP 주소 표시
Serial.println(WiFi.localIP());
}
무효 루프() (
// 클라이언트가 연결되었는지 확인
WiFiClient 클라이언트 = server.available();
만약 (!클라이언트) (
반품;
}

//클라이언트가 데이터를 보낼 때까지 기다립니다.
Serial.println("새 클라이언트");
동안(!client.available())(
지연(1);
}

// 쿼리의 첫 번째 줄을 읽습니다.
문자열 요구 = client.readStringUntil("\r");
직렬 인쇄(요구);
클라이언트.플러시();

//명령 처리
if (req.indexOf("/gpio/up") != -1)(
디지털 쓰기(위쪽, 1);
디지털 쓰기(아래로, 0);
지연(1000);
디지털 쓰기(위쪽, 0);
디지털 쓰기(아래로, 0);
}
else if (req.indexOf("/gpio/down") != -1)(
디지털 쓰기(위쪽, 0);
디지털 쓰기(아래로, 1);
지연(1000);
디지털 쓰기(위쪽, 0);
디지털 쓰기(아래로, 0);
}
else if (req.indexOf("/gpio/left") != -1)(
디지털 쓰기(위쪽, 1);
디지털 쓰기(아래로, 0);
디지털 쓰기(왼쪽, 1);
디지털 쓰기(오른쪽, 0);
지연(1000);
디지털 쓰기(위쪽, 0);
디지털 쓰기(아래로, 0);
디지털 쓰기(왼쪽, 0);
디지털 쓰기(오른쪽, 0);
}
else if (req.indexOf("/gpio/right") != -1)(
디지털 쓰기(위쪽, 1);
디지털 쓰기(아래로, 0);
디지털 쓰기(왼쪽, 0);
digitalWrite(오른쪽, 1);
지연(1000);
디지털 쓰기(위쪽, 0);
디지털 쓰기(아래로, 0);
디지털 쓰기(왼쪽, 0);
디지털 쓰기(오른쪽, 0);
}
또 다른(
Serial.println("잘못된 요청");
}

클라이언트.플러시();
// 응답 준비
문자열 s = "HTTP/1.1 200 OK\r\n콘텐츠 유형: text/html\r\n\r\n\r\n \r\n";

S+="


위로.
";
s+="
왼쪽 ";
s += "맞다
";
s+="
아래에";
s+="
\N";
// 클라이언트에게 응답을 보낸다.
client.print(들);
지연(1);
Serial.println("클라이언트 연결 끊김");
) 프로그램은 Arduino IDE로 작성되었습니다. NodeMCU 0.9 ESP8266 컨트롤러와 작동하도록 Arduino IDE를 설정하는 방법링크를 봐. 프로그램을 컨트롤러에 다운로드한 후 포트 모니터는 WiFi 라우터에 연결한 후 보드가 수신할 IP 주소를 읽을 수 있습니다. 컴퓨터 브라우저에서 다음을 수행해야 합니다. 주소 표시 줄이 주소를 입력하고 컨트롤러 프로그램이 생성할 페이지로 이동합니다. 다음과 같이 표시됩니다.

아래에

UP 링크를 클릭하면 차가 1초간 전진하고 멈춥니다. DOWN을 누르면 차가 1초간 후진합니다. LEFT - 회전 모터가 바퀴를 왼쪽으로 돌리고 자동차가 왼쪽으로 1초 이동합니다. RIGHT를 누를 때도 마찬가지입니다.

이 전체 시스템은 구성된 WiFi 액세스 포인트(WiFi 라우터)에서만 작동하지만 앞으로는 컨트롤러 NodeMCU 0.9 ESP8266, 자체적으로 액세스 포인트를 구성하고 웹 서버 역할을 합니다. 즉, 브라우저에서 해당 IP에 액세스하면 제어 기능이 있는 웹 페이지가 표시됩니다. 자율 WiFi 네트워크를 통해 이러한 컨트롤러에서 다른 컨트롤러로 데이터 전송을 구성하는 것도 흥미롭습니다.

1부: ESP8266 준비

이 글을 왜? 다양한 구성에서 ESP를 사용하는 것에 대한 Habré에 대한 기사가 이미 많이 있지만 어떤 이유로 모든 것이 연결, 플래시 및 프로그래밍되는 정확한 방법에 대한 세부 정보가 없습니다. "ESP, AA 배터리 2개, DHT22를 가지고 상자에 넣고 시계를 흔들면 온도계가 준비되었습니다!"와 같이. 결과적으로 이상하게 판명되었습니다. 이미 ESP로 작업하는 사람들은 자신이 한 일에서 이상한 것을 보지 못하고 배우고 싶어하는 사람들은 어디서부터 시작해야 하는지 이해하지 못합니다. 그래서 ESP가 어떻게 연결되고 플래싱되는지, 어떻게 아두이노와 외부 세계와 연결하는지, 그 과정에서 어떤 문제를 겪었는지에 대한 자세한 기사를 작성하기로 결정했습니다. 나는 가격의 순서를 제시하기 위해 aliexpress에 링크를 제공하고 모습구성 요소.

그래서 저는 마이크로컨트롤러 2개, 서로 다른 센서 7개, 전원 공급 장치 5개, DHT22 온도 센서, 그리고 온갖 종류와 색상의 전선과 수많은 저항기, 커패시터, 다이오드를 가지고 있었습니다. 이 모든 것이 온도계에 필요한 것은 아니지만 마이크로 일렉트로닉스에 들어가면 멈추기가 어려워집니다.


음식

ESP8266은 3.3V의 전압과 최소 300mA의 전류가 필요합니다. 불행히도 FT232RL과 같은 USB-UART 어댑터(프로그래머)가 제공할 수 없는 것처럼 Arduino Uno는 이러한 전류를 제공할 수 없습니다. 한계는 약 50mA입니다. 즉, 별도의 식사를 준비해야 합니다. 그리고 "ESP 모듈의 RX 핀에 5볼트 신호를 인가했는데 왜 플라스틱 탄 냄새가 나지?"와 같은 문제를 피하기 위해 Arduino도 3.3V에서 작동하면 더 좋을 것입니다.

세 가지 솔루션이 있습니다.

2. 5V에서 3.3V로 강압하는 전압 조정기가 있는 기성품 모듈을 구입하십시오. 아마도 이것이 가장 편리한 옵션일 것입니다.

3. AMS1117 레귤레이터와 하나의 22uF 탄탈륨 커패시터에서 모듈을 직접 조립합니다.

나는 종종 3.3V가 필요하기 때문에 세 번째 옵션을 선택했습니다. 욕심이 많고 전원 공급 장치에 바로 레귤레이터를 구축하는 것을 좋아합니다.

AMS1117을 사용하면 모든 것이 간단합니다. 텍스트를 위로 올리면 다리의 전압이 왼쪽에서 오른쪽으로 증가합니다: 0(Gnd), 3.3V(Vout), 5V(Vin).
0과 출력 사이에는 22마이크로패럿 탄탈륨 커패시터가 필요합니다(지침에 따라 전해액을 넣으면 어떻게 될까요? 확인하지 않았습니다). 탄탈륨 SMD 커패시터는 스트립이 있는 곳에 플러스가 있습니다. SMD 구성 요소의 약간의 기괴한 납땜은 그러한 야만성을 위해 완전히 의도되지 않았습니다.

반드시 확인하세요 출력 전압. 3.3V(예: 1.17V)보다 현저히 낮은 경우 - 납땜 후 레귤레이터를 식히고 접점을 확인하십시오. 22uF보다 큰 커패시터를 넣으면 멀티미터에 더 높은 전압이 표시될 수 있습니다.

왜 AMS1117인가? 널리 사용됩니다. 거의 모든 곳에서 찾을 수 있으며 Arduino Uno조차도 일반적으로 AMS1117-5.0입니다.
비슷한 크기와 가격을 알고 계시다면 더 사용하기 쉬운 - 적어주세요.

중요한 점. 이유는 모르겠지만 AMS1117은 연결 품질에 대해 매우 변덕스럽습니다. 연락처는 신뢰할 수 있어야 합니다. 더 나은 납땜. 그렇지 않으면 테스트에서 3.3V를 생성하지만 부하 상태에서는 아무 것도 생성하지 않습니다.

ESP8266 연결

나는 Model 07이 간섭, 기계적 충격에 대한 보호 및 방열판 역할을 하는 훌륭한 금속 실드를 가지고 있기 때문에 선택했습니다. 후자는 연소된 모듈과 단순히 가열된 모듈의 차이를 제공합니다. 또한 외부 안테나용 소켓이 있습니다.

칩을 시작하려면 10kΩ 저항을 통해 VCC와 CH_P를 연결해야 합니다. 그렇지 않은 경우 1-20kΩ 범위 중 하나가 작동합니다. 또한, 특히 모델 07은 여전히 ​​GPIO15(GND에 가장 가까운 것)가 "지면에" 있어야 합니다(연결이 반대쪽에 있기 때문에 그림에는 표시되지 않음).

이제 USB-UART 어댑터를 가져 와서 3.3V로 전환하고 RX를 TX, TX에서 RX, GND를 접지에 연결합니다(이것이 없으면 전송이 불안정합니다). 3.3V로 전환할 수 없는 경우 가장 간단한 저항 전압 분배기를 사용할 수 있습니다. ESP RX를 1kΩ의 저항을 통해 TX 어댑터에 연결하고 ESP RX를 2kΩ을 통해 접지에 연결합니다. 3.3V와 5V를 연결하는 더 복잡하고 안정적인 방법이 많이 있지만 이 경우에는 가능합니다.

그리고 원하는 COM 포트에서 9600의 속도로 연결합니다(장치 관리자에서 볼 수 있음).

저는 SecureCRT를 사용하고 Putty도 괜찮으며 Linux 애호가는 이미 무엇을 해야 하고 어디를 봐야 하는지 알고 있습니다.

(AT+RST는 칩을 리셋함)

아무 일도 일어나지 않으면 - 끄기 - 전원을 켜고 여전히 아무 일도 일어나지 않으면 - TX / RX의 대응을 확인하고 재정렬하거나 칩에 납땜을 시도하십시오.

때때로 칩은 모의 실험 중에 멈춘 다음 어댑터를 끄는 방법(예: USB에서 빼냄)을 포함하여 전원을 차단해야 합니다. 작동하지.

때때로 어댑터를 사용한 트릭이 USB 포트를 끊습니다. 임시 해결책으로 다른 USB 포트를 사용할 수도 있지만 일반적으로 컴퓨터를 다시 시작하는 것이 좋습니다.

때때로 이것은 COM 포트 번호를 변경합니다. Linux에서는 udev로 해결할 수 있습니다.

텍스트 대신 쓰레기가 오면 속도 설정을 확인하십시오. 일부 구형 칩은 115200에서 작동합니다.

처음에는 칩이 가열되지만 정말 뜨겁고 계속 가열되면 모든 연결을 끊고 확인하십시오. +3.3V가 케이스에 닿지 않도록 5V가 전혀 오지 않도록 어댑터의 "접지"가 칩의 "접지"에 연결됩니다. 금속 스크린이 있는 모델은 태우기가 매우 어렵고(하지만 불가능한 것은 없습니다) 스크린이 없는 모델에 대해 불평하며 작은 실수라도 칩 수명의 마지막이 될 수 있다고 말합니다. 그러나 나는 이것을 확인하지 않았다.

펌웨어

내 선택은 NodeMCU입니다. 그녀는 메모리 및 하드웨어 지원에 문제가 있지만 코드의 단순성과 디버깅의 용이성으로 인해 여러 번 보상을 받습니다.

NodeMCU 플래셔와 LuaLoader도 필요합니다(후자는 선택 사항이며 이 펌웨어로 작업할 다른 클라이언트가 있습니다).

칩을 끕니다. GPIO0을 접지에 연결하고 칩을 켭니다.

아무 일도 일어나지 않고 AP MAC/STA MAC 필드가 비어 있으면 GPIO0이 지상에 있는지 다시 확인하십시오.
펌웨어가 시작되었지만 중단된 경우 - 로그 탭을 보면 이 특정 칩이 FT232RL에서 플래시되는 것을 거부했지만 PL2303HX에서는 문제 없이 576000의 속도로 플래시되었습니다. 플라스틱을 열어야 합니다. 케이스를 만들고 5V에서 3.3V로 와이어를 납땜하면 3.3, 5, TX, RX, Gnd의 5가지 출력 옵션이 있습니다.


참고: STA MAC이 변경되었습니다. 플래셔가 제대로 보여주지 않은 것 같은데 확인이 필요합니다.

힘과 신경을 절약하기 위해 기성품 또는 반제품을 사용할 수 있습니다.

편리한 배선이 가능한 일회용 어댑터가 있습니다.
있다