CC3000 WiFi Shield

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

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();
}
디버깅 화면

일정 간격으로 서버에서 현재 시간을 가져옵니다.

 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다