목차
CC3000 WiFi Shield
와이파이 쉴드는 아두이노와 연결하여 쉽게 무선통신(인터넷, 서버 등)을 할수 있게 해주는 모듈입니다.
- CC3000 WiFi Shield 무선랜 인터넷 응용 / SPI 인터페이스 통신
- Network processor IEEE 802.11b / g
- Embedded IPv4 TCP/IP stack
- Built in Antenna 내장
- Micro SD Card 슬롯
- 전송 : 11Mbps + 18dBm, CCK
- 수신 : -86dBm 8% packet error rate, 11Mbps
- 온도 : -20℃ ~ 70℃
- 전압 : 5V
- 사이즈 : 60 x 53 x 12
Arduino UNO R3 예제
부품 목록
부품명 | Arduino UNO R3 | |
---|---|---|
기능 | 아두이노 | |
수량 | 1 | |
판매처 | https://kit128.com/goods/view?no=337 |
부품명 | CC3000 와이파이 쉴드(WiFi Shield) with SD |
|
---|---|---|
기능 | WiFi Module | |
수량 | 1 | |
판매처 | https://kit128.com/goods/view?no=141 |
핀 연결
Arduino UNO R3 과 아두이노 와이파이 쉴드를 아래와 같이 층으로 연결합니다.
소스코드
최신 소스코드는 [파일] => [예제] => [WhiteAT UNO] => [CC3000Shield] => [SimpleClient] 에 있으며
라이브러리는 아두이노 개발환경 (https://docs.whiteat.com/?page_id=5449) 을 참조하세요
/* WIFI 로 서버에서 시간을 가져오는 예제 출처: http://whiteat.com/Arduino 보드 Arduino UNO R3 : https://kit128.com/goods/view?no=337 Arduino WiFi Shield CC3000 : https://kit128.com/goods/view?no=141 */ #include <WAT_Multi.h> #include <Adafruit_CC3000.h> #include <ccspi.h> #include <SPI.h> #include <string.h> #include "utility/debug.h" WMulti tTCPSend = WMulti(3000); // the interrupt and control pins #define ADAFRUIT_CC3000_IRQ 3 // MUST be an interrupt pin! // These can be any two pins #define ADAFRUIT_CC3000_VBAT 5 #define ADAFRUIT_CC3000_CS 10 // Use hardware SPI for the remaining pins // On an UNO, SCK = 13, MISO = 12, and MOSI = 11 Adafruit_CC3000 cc3000 = Adafruit_CC3000(ADAFRUIT_CC3000_CS, ADAFRUIT_CC3000_IRQ, ADAFRUIT_CC3000_VBAT, SPI_CLOCK_DIVIDER); // you can change this clock speed #define WLAN_SSID "kit128-wifi" // cannot be longer than 32 characters! #define WLAN_PASS "mypassword" // Security can be WLAN_SEC_UNSEC, WLAN_SEC_WEP, WLAN_SEC_WPA or WLAN_SEC_WPA2 #define WLAN_SECURITY WLAN_SEC_WPA2 Adafruit_CC3000_Client client; const unsigned long dhcpTimeout = 60L * 1000L, // Max time to wait for address from DHCP connectTimeout = 15L * 1000L, // Max time to wait for server connection responseTimeout = 15L * 1000L; // Max time to wait for data from server void setup(void) { uint32_t ip = 0L, t; Serial.begin(115200); Serial.println("Arduino Examples - CC3000 WiFi Shield"); Serial.println(" https://docs.whiteat.com/?p=2565"); Serial.println(F("Hello, CC3000!")); Serial.print("Free RAM: "); Serial.println(getFreeRam(), DEC); Serial.print(F("Initializing...")); if (!cc3000.begin()) { Serial.println(F("failed. Check your wiring?")); return; } Serial.print(F("OK.\r\nConnecting to network...")); if (!cc3000.connectToAP(WLAN_SSID, WLAN_PASS, WLAN_SECURITY)) { Serial.println(F("Failed!")); return; } Serial.println(F("connected!")); Serial.print(F("Requesting address from DHCP server...")); for (t = millis(); !cc3000.checkDHCP() && ((millis() - t) < dhcpTimeout); delay(1000)); if (cc3000.checkDHCP()) { Serial.println(F("OK")); } else { Serial.println(F("failed")); return; } while (!displayConnectionDetails()) delay(1000); // Look up server's IP address Serial.print(F("\r\nGetting server IP address...")); t = millis(); while ((0L == ip) && ((millis() - t) < connectTimeout)) { if (cc3000.getHostByName("watclean7.com", &ip)) break; delay(1000); } if (0L == ip) { Serial.println(F("failed")); return; } cc3000.printIPdotsRev(ip); Serial.println(); // Request JSON-formatted data from server (port 80) Serial.print(F("Connecting to Time Server.")); client = cc3000.connectTCP(ip, 1010); if (client.connected()) { Serial.print(F("connected.\r\nRequesting data...")); // client.print(F("GET /json/ HTTP/1.1\r\nHost: freegeoip.net\r\n\r\n")); } else { Serial.println(F("failed")); return; } } void loop(void) { int c; TaskTCPSend(&tTCPSend); while ((c = timedRead()) != -1) { Serial.print(char(c)); } } void TaskTCPSend(WMulti * _task) { if (!_task->IsMyTurn()) return; client.write((byte *)"T", 64); Serial.println(); } bool displayConnectionDetails(void) { uint32_t ipAddress, netmask, gateway, dhcpserv, dnsserv; if (!cc3000.getIPAddress(&ipAddress, &netmask, &gateway, &dhcpserv, &dnsserv)) { Serial.println(F("Unable to retrieve the IP Address!\r\n")); return false; } else { Serial.print(F("\nIP Addr: ")); cc3000.printIPdotsRev(ipAddress); Serial.print(F("\nNetmask: ")); cc3000.printIPdotsRev(netmask); Serial.print(F("\nGateway: ")); cc3000.printIPdotsRev(gateway); Serial.print(F("\nDHCPsrv: ")); cc3000.printIPdotsRev(dhcpserv); Serial.print(F("\nDNSserv: ")); cc3000.printIPdotsRev(dnsserv); Serial.println(); return true; } } int timedRead(void) { if (!client.available()) return -1; return client.read(); }
디버깅 화면
일정 간격으로 서버에서 현재 시간을 가져옵니다.