일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- WizFi310
- 안드로이드
- AT+FSOCK
- C Script
- Cat M1
- 오픈 하우스
- OpenSSL
- SerialPassthrough
- WIZwiki-W7500
- WizFi250
- MQTT
- Gainspan
- NB-IoT
- ESP8266
- IOT
- SSL Server
- cloud
- WiFi
- WizFi210
- Neul
- AT+MEVTFORM
- script
- micropython
- ThingPlug
- LoRa
- PicoC
- IoTMakers
- KT
- SKT
- W7500
- Today
- Total
IoT Wireless
Basic examples of WizFi250-PicoC 본문
WizFi250에 PicoC를 포팅하면서 아래와 같은 기능을 추가하고, 간단한 스크립트 예제를 테스트 해 보았다.
1. Flash Read/Write/Delete
picoc_read : Flash에 저장된 스크립트 C 파일을 읽어온다.
picoc_write : 스크립트 C 파일을 Flash에 저장한다. (Raw File Upload)
picoc_delete : Flash에 저장된 스크립트 C 파일을 읽어온다.
picoc_run : Flash에 저장된 스크립트 C 파일을 실행한다.
WizFi250이 부팅이 되면, 특정 Flash 섹터에 있는 C 스크립트 파일을 확인하고, 유효한 스크립트 파일이면, 스크립트 내의 main() 함수를 실행시키게 구현하였다.
2. WiFi Management 함수
int wifi_join(char*, char*, char*, char*, char*, char*); int wifi_leave();
3. BSD 소켓 함수 추가
int accept(int, struct sockaddr *, unsigned long *); int bind(int, struct sockaddr *, unsigned long); int shutdown(int, int); int getpeername(int, struct sockaddr *, unsigned long *); int getsockname(int, struct sockaddr *, unsigned long *); int getsockopt(int, int, int, void *, unsigned long *); int setsockopt(int, int, int, void *, unsigned long); int close(int); int connect(int, struct sockaddr *, unsigned long); int listen(int, int); int recv(int, void *, unsigned long, int); int recvfrom(int, void *, unsigned long, int, struct sockaddr *, unsigned long *); int send(int, void *, unsigned long, int); int sendto(int, void *, unsigned long, int, struct sockaddr *, unsigned long); int socket(int, int, int); int select(int, fd_set *, fd_set *, fd_set *, struct timeval *); int fcntl(int, int, int);
BSD 함수는 lwip 라이브러리에서 지원하는 것을 기준으로 작성하였고, 전체적으로 통상적인 BSD 소켓 함수 수준의 90% 수준에서 호환될 것으로 보인다.
(소켓 옵션, 소켓 에러 코드, File Descriptor등에서 지원하지 못하는 부분이 있음)
4. PicoC 스크립트 Example : Basic
기본적인 C 문법과 Function Call 등을 확인하기 위해서 WizFi250의 GPIO를 설정/제어하는 함수와 Delay 함수를 추가하여, 아래와 같은 간단한 C 스크립트를 사용하였다.
먼저, 메모장으로 main() 함수가 포함된 간단한 C 소스(스크립트) 파일을 작성한다.
그리고, picoc_write 명령을 이용하여, 이 스크립트 파일을 Flash에 저장한 후에, 실행시킨다.
아래는 스크립트 소스와 실행 화면이다.
...
#include <stdio.h> #include <stk.h> int my_function(int i) { int j=10; return (9-i); } void main(void) { printf("Hello C Script \r\n"); int i = 0; pinMode(GPIO12, 1); for (i=0; i<10; i++) { printf("%d", my_function(i)); pinOut(GPIO12, 0); delay_ms(100); pinOut(GPIO12, 1); delay_ms(100); } printf("\r\nDone\r\n\r\n"); }...
5. PicoC 스크립트 Example : UDP Client
이번에는 BSD 소켓 함수에 대한 테스트를 진행하였다.
테스트를 위한 BSD 소켓 함수를 사용한 C 소스는 Berkeley Socket Wiki 사이트의 UDP 클라이언트 C 소스를 사용하였다.
http://en.wikipedia.org/wiki/Berkeley_sockets#Client_2
위 링크에 있는 C 소스와 아래의 C 스크립트를 비교해보면, AP에 Joining 하는 함수가 추가 되었을 뿐, 대부분의 소스를 변경없이 재활용 할 수 있음을 확인하였다.
#include <network.h> #include <string.h> #include <stdio.h> #include <wifi.h> void main(void) { int result = 0; int sock; struct sockaddr_in sa; int bytes_sent; char buffer[200]; if ( result = wifi_join("WizFiDemoAP", "wpa2", "11111111", 0, 0, 0)!=0 ) { printf("wifi_join error : %d", result); return; } strcpy(buffer, "Hello WizFi250!\r\n"); sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); if (-1 == sock) { printf("Error Creating Socket\r\n"); return; } memset(&sa, 0, sizeof sa); sa.sin_family = AF_INET; sa.sin_addr.s_addr = inet_addr("192.168.3.255"); sa.sin_port = htons(6000); bytes_sent = sendto(sock, buffer, strlen(buffer), 0,(struct sockaddr*)&sa, sizeof(sa)); if (bytes_sent < 0) { printf("Error sending packet: \r\n"); return; } close(sock); return; }
6. Features of C 스크립팅
- S/W 작업을 위한 별도의 툴을 PC에 설치할 필요 없음
- TCP/UDP, Server/Client, Destination IP/Port 등을 BSD 소켓 표준 함수 수준에서 접근 가능
- Block/Non-block, TCP-Keep-Alive 등의 소켓 옵션 사용 가능(getsockopt, setsockopt)
- GPIO, ADC, UART 등의 Peripherals도 소스 수준에서 제어 가능
- Data Packing도 유저가 자유롭게 설정 가능(C 함수 수준 : send, recv, uart_rx, uart_tx, delay)
- 별도의 Configuration Tool이 필요 없음(Web Server, PC Utility)
'IoT Platform(Script)' 카테고리의 다른 글
Software diagram of WizFi250-PicoC (0) | 2015.04.28 |
---|---|
Introduction to Embedded Script Engine (0) | 2015.04.28 |
Code memory of WizFi250(MicroPython) (0) | 2015.03.30 |
Porting MicroPython to WizFi250 (0) | 2015.03.27 |
WizFi250 PicoC interactive mode (0) | 2014.11.14 |