목차
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();
}
디버깅 화면
일정 간격으로 서버에서 현재 시간을 가져옵니다.



