Ch4_7 RFID 데이터를 트위터에 올리기
학습 내용
RFID 태크에서 인식된 신호를 트위터에 나타낼수있는 임베디드 클라우드 컴퓨팅( Embedded Cloud Computing: "Internet of Things")을 간단히 구현 해볼수 있습니다.
배선도 & 회로도
_하드웨어 구성요소_
필요한 하드웨어 구성 요소는:
- mbed 1개!
- ID-12 Innovations RFID reader 1개
- RJ-45 이더넷 소켓 1개
- A breadboard + some wires
_하드웨어 셋업_
하드웨어 셋업사진:
먼저 브레드보드에 mbed를 설치하고 접지를 (GND)핀과 브레드보드의 접지라인을 연결한 후 USB 파워핀(VU) 파워라인에 연결합니다.
RFID Reader
- 5V (pin 11) 과 RST (pin 2) 핀을 파워라인에 연결
- GND (pin 1) 과 FS (pin 7) 핀을 접지라인에 연결
- 마지막으로 D0 (pin 9) 을 mbed 의p14 (시리얼 입력 핀)에 연결
Ethernet Socket
- 소켓의 pin 3 을 mbed의 RD- pin에 연결
- 소켓의 pin 1 을 mbed의 RD+ pin에 연결
- 소켓의 pin 4 를 mbed의 TD- pin에 연결
- 소켓의 pin 6 을 mbed의 TD+ pin에 연결
Warning
소켓의 핀 출력은 단지 이 부품에서만 유효합니다.만약 다른 부품을 사용하면 핀 출력 포트를 재 확인해야 합니다.
배선 사진
마지막으로 네트워크 케이블을 소켓에 연결하면 mbed는 인터넷과 연결됩니다!
소프트웨어 설치
하드웨어를 작동하고 트위터에 연결하려면 다음의 라이브러리를 설치해야합니다:
_트위터 계정과 태그 설정_
Information
The basic authentication service for twitter is going down at the end of the week. To continue using that program, the code has been updated to use http://supertweet.net which acts as an API proxy. Simply visit the website to setup your twitter account for this API. See: http://www.supertweet.net/about/documentation
_Supertweet 계정 만들기_
_Supertweet 테스트 코드_
#include "mbed.h" #include "EthernetNetIf.h" #include "SuperTweetV1XML.h" #define YOUR_ACCOUNT "EuiSeokHong" #define YOUR_PASSWORD "110787" extern "C" void mbed_reset(); EthernetNetIf net; SuperTweetV1XML st(YOUR_ACCOUNT, YOUR_PASSWORD); /** * Callback function for postStatusesUpdate. * * @param buf A pointer to a buffer. * @param siz A size of the buffer. */ void func(char *buf, size_t siz) { #if 0 /* * This is for checking a response. */ for (int i = 0; i < siz; i++) { printf("%c", buf[i]); } #endif } /** * Entry point. */ int main() { char text[BUFSIZ]; int cnt = 0; EthernetErr err = net.setup(); if (err) { error("Network setup failed.\n"); } while (1) { snprintf(text, sizeof(text), "Hi! I'm mbed from ARM. Message number is %d", cnt++); HTTPResult r = st.postStatusesUpdate(std::string(text), func); printf("r=%d\n", (int)r); /* * Note: * I don't know why sometime it get a error. * I think it a bug in a mbed library. */ if (r != 0) { printf("Resetting...\n"); mbed_reset(); } wait(5); } }
_Tweet 테스트하기_
#include "EthernetNetIf.h" #include "HTTPClient.h" EthernetNetIf eth; int main() { printf("Init\n"); printf("\r\nSetting up...\r\n"); EthernetErr ethErr = eth.setup(); if(ethErr) { printf("Error %d in setup.\n", ethErr); return -1; } printf("\r\nSetup OK\r\n"); HTTPClient twitter; HTTPMap msg; msg["status"] = "I am tweeting from my mbed!"; //A good example of Key/Value pair use with Web APIs twitter.basicAuth("EuiSeokHong", "110787"); //We use basic authentication, replace with you account's parameters //No need to retieve data sent back by the server HTTPResult r = twitter.post("http://api.supertweet.net/1/statuses/update.xml", msg, NULL); if( r == HTTP_OK ) { printf("Tweet sent with success!\n"); } else { printf("Problem during tweeting, return code %d\n", r); } return 0; }
_TweetRFID 코딩_
프로그램 연결사이트:
실제로 프로그램을 작동하기 위해서는 다음의 셋업이 필요합니다.
- TWITTER_USER 와 TWITTER_PASSWORD 자기의 계정 파라메터를 입력한다.
- ids_list and names_list 테이블에 등록된 ID와 이름을 입력한다.
- IDS_COUNT에 등록된수로 업데이트 한다.
- (msg["status"])에 본인 나타내려는 문장을 입력한다...
코딩
main.cpp
// RFID Tweeter #include "mbed.h" #include "ID12RFID.h" #include "EthernetNetIf.h" #include "HTTPClient.h" #define TWITTER_USER "donatiengarnier" #define TWITTER_PASSWORD "myverysecurepassword" #define IDS_COUNT 3 const int ids_list[IDS_COUNT] = {89481809, 89481810, 89481811}; const char* names_list[IDS_COUNT] = {"Donatien", "Simon", "Dan"}; EthernetNetIf ethernet; HTTPClient twitter; ID12RFID rfid(p14); DigitalOut tag_present(LED1); DigitalOut tweet_ok(LED4); int main() { ethernet.setup(); twitter.basicAuth(TWITTER_USER, TWITTER_PASSWORD); while(true) { int id = rfid.read(); tag_present = 1; for(int i = 0; i < IDS_COUNT; i++) { if (ids_list[i] == id) { HTTPMap msg; msg["status"] = names_list[i]; msg["status"] += " just arrived home!"; HTTPResult r = twitter.post("http://api.supertweet.net/1/statuses/update.xml", msg, NULL); tweet_ok = !r; } } tag_present = 0; } }
라이브러리
Import libraryEthernetNetIf
This library is deprecated.
Import library
api_msg | This struct contains a function to execute in another thread context and a struct api_msg_msg that serves as an argument for this function |
api_msg_msg | This struct includes everything that is necessary to execute a function for a netconn in another thread context (mainly used to process netconns in the tcpip_thread context to be thread safe) |
dhcp_msg | Minimum set of fields of any DHCP message |
dns_api_msg | As do_gethostbyname requires more arguments but doesn't require a netconn, it has its own struct (to avoid struct api_msg getting bigger than necessary) |
DNSRequest | This is a simple DNS Request class |
EthernetNetIf | Ethernet network interface |
Host | Host information container |
igmp_group | Igmp group structure - there is a list of groups for each interface these should really be linked from the interface, but if we keep them separate we will not affect the lwip original code too much |
IpAddr | IP Address container |
local_hostlist_entry | Struct used for local host-list |
memp_malloc_helper | This structure is used to save the pool one element came from |
mib_array_node | Derived node, points to a fixed size const array of sub-identifiers plus a 'child' pointer |
mib_external_node | Derived node, has access functions for mib object in external memory or device using 'tree_level' and 'idx', with a range 0 |
mib_list_rootnode | Derived node, points to a doubly linked list of sub-identifiers plus a 'child' pointer |
mib_node | Node "base class" layout, the mandatory fields for a node |
mib_ram_array_node | Derived node, points to a fixed size mem_malloced array of sub-identifiers plus a 'child' pointer |
netconn | A netconn descriptor |
NetService | Net Service base class |
obj_def | Object definition returned by (get_object_def)() |
pbuf_custom_ref | A custom pbuf that holds a reference to another pbuf, which is freed when this custom pbuf is freed |
snmp_obj_id | Internal object identifier representation |
snmp_resp_header_lengths | Output response message header length fields |
snmp_trap_header_lengths | Output response message header length fields |
TCPSocket | This is a simple TCP Socket class |
UDPSocket | This is a simple UDP Socket class |
Import libraryHTTPClient_ToBeRemoved
HTTP Client library
Import library
HTTPClient |
A simple HTTP Client The
HTTPClient
is composed of:
|
HTTPMap | Map of key/value pairs Used to transmit POST data using the application/x-www-form-urlencoded encoding |
HTTPText | A data endopint to store text |
IHTTPDataIn | This is a simple interface for HTTP data storage (impl examples are Key/Value Pairs, File, etc...) |
IHTTPDataOut | This is a simple interface for HTTP data storage (impl examples are Key/Value Pairs, File, etc...) |
Import library
SuperTweet | SuperTweet API interface driver |
SuperTweetV1XML | SuperTweet API interface driver |
학습 참고
Please log in to post comments.