mbed/ARM 活用事例 第6章 mbedをネットワークにつなげよう!
Dependencies: EthernetNetIf NTPClient_NetServices TextLCD mbed
main.cpp@0:557d73fbbcee, 2011-10-04 (annotated)
- Committer:
- sunifu
- Date:
- Tue Oct 04 13:27:49 2011 +0000
- Revision:
- 0:557d73fbbcee
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sunifu | 0:557d73fbbcee | 1 | #include "mbed.h" |
sunifu | 0:557d73fbbcee | 2 | #include "EthernetNetIf.h" |
sunifu | 0:557d73fbbcee | 3 | #include "UDPSocket.h" |
sunifu | 0:557d73fbbcee | 4 | #include "NTPClient.h" |
sunifu | 0:557d73fbbcee | 5 | #include "TextLCD.h" |
sunifu | 0:557d73fbbcee | 6 | |
sunifu | 0:557d73fbbcee | 7 | #define PORT 50001 |
sunifu | 0:557d73fbbcee | 8 | #define LOCATION 1000 |
sunifu | 0:557d73fbbcee | 9 | |
sunifu | 0:557d73fbbcee | 10 | TextLCD lcd(p24, p26, p27, p28, p29, p30); |
sunifu | 0:557d73fbbcee | 11 | AnalogIn temp_in(p20); |
sunifu | 0:557d73fbbcee | 12 | AnalogIn humid_in(p19); |
sunifu | 0:557d73fbbcee | 13 | |
sunifu | 0:557d73fbbcee | 14 | Host server; |
sunifu | 0:557d73fbbcee | 15 | IpAddr ip; |
sunifu | 0:557d73fbbcee | 16 | UDPSocket udp; |
sunifu | 0:557d73fbbcee | 17 | NTPClient ntp; |
sunifu | 0:557d73fbbcee | 18 | |
sunifu | 0:557d73fbbcee | 19 | Ticker in; |
sunifu | 0:557d73fbbcee | 20 | |
sunifu | 0:557d73fbbcee | 21 | void Update(){ |
sunifu | 0:557d73fbbcee | 22 | char msg[64] ; |
sunifu | 0:557d73fbbcee | 23 | float r_temp, r_humid; |
sunifu | 0:557d73fbbcee | 24 | float temp,humid; |
sunifu | 0:557d73fbbcee | 25 | char strTimeMsg[16]; |
sunifu | 0:557d73fbbcee | 26 | time_t ctTime; |
sunifu | 0:557d73fbbcee | 27 | |
sunifu | 0:557d73fbbcee | 28 | temp = temp_in; |
sunifu | 0:557d73fbbcee | 29 | humid = humid_in; |
sunifu | 0:557d73fbbcee | 30 | |
sunifu | 0:557d73fbbcee | 31 | r_humid = humid * 3.3 * 100 ; |
sunifu | 0:557d73fbbcee | 32 | r_temp = temp * 55.0 ; |
sunifu | 0:557d73fbbcee | 33 | |
sunifu | 0:557d73fbbcee | 34 | ctTime = time(NULL)+32400; |
sunifu | 0:557d73fbbcee | 35 | strftime(strTimeMsg,16,"%y/%m/%d %H:%M",localtime(&ctTime)); |
sunifu | 0:557d73fbbcee | 36 | |
sunifu | 0:557d73fbbcee | 37 | lcd.cls(); |
sunifu | 0:557d73fbbcee | 38 | lcd.locate(0,0); |
sunifu | 0:557d73fbbcee | 39 | lcd.printf("%s",strTimeMsg); |
sunifu | 0:557d73fbbcee | 40 | |
sunifu | 0:557d73fbbcee | 41 | lcd.locate(0,1); |
sunifu | 0:557d73fbbcee | 42 | lcd.printf("H%5.1f%% T%5.1f",r_humid,r_temp); |
sunifu | 0:557d73fbbcee | 43 | |
sunifu | 0:557d73fbbcee | 44 | lcd.locate(14,1); |
sunifu | 0:557d73fbbcee | 45 | lcd.putc(0xDf); |
sunifu | 0:557d73fbbcee | 46 | lcd.putc(0x43); |
sunifu | 0:557d73fbbcee | 47 | |
sunifu | 0:557d73fbbcee | 48 | ctTime = time(NULL)+32400; |
sunifu | 0:557d73fbbcee | 49 | strftime(strTimeMsg,16,"%y/%m/%d %H:%M",localtime(&ctTime)); |
sunifu | 0:557d73fbbcee | 50 | sprintf(msg, "%4d\t,%6.2f\t,%6.2f\t,",LOCATION,r_temp,r_humid); |
sunifu | 0:557d73fbbcee | 51 | strcat(msg,strTimeMsg); |
sunifu | 0:557d73fbbcee | 52 | udp.sendto( msg, strlen(msg), &server ); |
sunifu | 0:557d73fbbcee | 53 | printf("%s\r\n",msg); |
sunifu | 0:557d73fbbcee | 54 | } |
sunifu | 0:557d73fbbcee | 55 | |
sunifu | 0:557d73fbbcee | 56 | void setRTC_NTP() |
sunifu | 0:557d73fbbcee | 57 | { |
sunifu | 0:557d73fbbcee | 58 | char strNtpErrMsg[32] ; |
sunifu | 0:557d73fbbcee | 59 | |
sunifu | 0:557d73fbbcee | 60 | Host ntpsrv(IpAddr(), 123, "ntp.nict.jp") ; |
sunifu | 0:557d73fbbcee | 61 | NTPResult ntpResult = ntp.setTime(ntpsrv) ; |
sunifu | 0:557d73fbbcee | 62 | |
sunifu | 0:557d73fbbcee | 63 | if( ntpResult == NTP_OK ){ |
sunifu | 0:557d73fbbcee | 64 | sprintf(strNtpErrMsg,"NTP Connect OK!"); |
sunifu | 0:557d73fbbcee | 65 | }else if ( ntpResult == NTP_PRTCL ){ |
sunifu | 0:557d73fbbcee | 66 | sprintf(strNtpErrMsg,"NTP Protocol error.") ; |
sunifu | 0:557d73fbbcee | 67 | }else if ( ntpResult == NTP_TIMEOUT ){ |
sunifu | 0:557d73fbbcee | 68 | sprintf(strNtpErrMsg,"Connection timeout."); |
sunifu | 0:557d73fbbcee | 69 | }else if ( ntpResult == NTP_DNS ){ |
sunifu | 0:557d73fbbcee | 70 | sprintf(strNtpErrMsg,"Could not resolve DNS hostname.") ; |
sunifu | 0:557d73fbbcee | 71 | }else if ( ntpResult == NTP_PROCESSING ){ |
sunifu | 0:557d73fbbcee | 72 | sprintf(strNtpErrMsg,"Processing."); |
sunifu | 0:557d73fbbcee | 73 | }else{ |
sunifu | 0:557d73fbbcee | 74 | sprintf(strNtpErrMsg,"NTP Error."); |
sunifu | 0:557d73fbbcee | 75 | } |
sunifu | 0:557d73fbbcee | 76 | printf("[%s]\r\n",strNtpErrMsg); |
sunifu | 0:557d73fbbcee | 77 | } |
sunifu | 0:557d73fbbcee | 78 | |
sunifu | 0:557d73fbbcee | 79 | int main() { |
sunifu | 0:557d73fbbcee | 80 | |
sunifu | 0:557d73fbbcee | 81 | char ipaddr[16]; |
sunifu | 0:557d73fbbcee | 82 | |
sunifu | 0:557d73fbbcee | 83 | EthernetNetIf eth; // (1) -- DHCP |
sunifu | 0:557d73fbbcee | 84 | // EthernetNetIf eth( // (2) -- static IP address |
sunifu | 0:557d73fbbcee | 85 | // IpAddr(192,168,0,10), // IP Address |
sunifu | 0:557d73fbbcee | 86 | // IpAddr(255,255,255,0), // Subnet Mask |
sunifu | 0:557d73fbbcee | 87 | // IpAddr(192,168,0,1), // Default Gateway |
sunifu | 0:557d73fbbcee | 88 | // IpAddr(192,168,0,1) // DNS Server |
sunifu | 0:557d73fbbcee | 89 | // ) ; |
sunifu | 0:557d73fbbcee | 90 | |
sunifu | 0:557d73fbbcee | 91 | lcd.cls(); |
sunifu | 0:557d73fbbcee | 92 | lcd.locate(0,0); |
sunifu | 0:557d73fbbcee | 93 | lcd.printf("NW Setup ... "); |
sunifu | 0:557d73fbbcee | 94 | |
sunifu | 0:557d73fbbcee | 95 | EthernetErr ethErr = eth.setup(); |
sunifu | 0:557d73fbbcee | 96 | |
sunifu | 0:557d73fbbcee | 97 | if( ethErr != ETH_OK ) |
sunifu | 0:557d73fbbcee | 98 | { |
sunifu | 0:557d73fbbcee | 99 | lcd.locate(0,0); |
sunifu | 0:557d73fbbcee | 100 | lcd.printf("NW Setup Error! ", ethErr); |
sunifu | 0:557d73fbbcee | 101 | return -1; |
sunifu | 0:557d73fbbcee | 102 | } |
sunifu | 0:557d73fbbcee | 103 | |
sunifu | 0:557d73fbbcee | 104 | lcd.locate(0,0); |
sunifu | 0:557d73fbbcee | 105 | lcd.printf("NW Setup ...[OK]"); |
sunifu | 0:557d73fbbcee | 106 | |
sunifu | 0:557d73fbbcee | 107 | // ip = IpAddr(192,168,0,4); |
sunifu | 0:557d73fbbcee | 108 | ip = IpAddr(192,244,80,66); |
sunifu | 0:557d73fbbcee | 109 | server = Host(ip, PORT, NULL); |
sunifu | 0:557d73fbbcee | 110 | |
sunifu | 0:557d73fbbcee | 111 | lcd.locate(0,1); |
sunifu | 0:557d73fbbcee | 112 | sprintf(ipaddr,"%d.%d.%d.%d ",ip[0],ip[1],ip[2],ip[3]); |
sunifu | 0:557d73fbbcee | 113 | lcd.printf("%s",ipaddr); |
sunifu | 0:557d73fbbcee | 114 | wait(1.0); |
sunifu | 0:557d73fbbcee | 115 | |
sunifu | 0:557d73fbbcee | 116 | setRTC_NTP(); |
sunifu | 0:557d73fbbcee | 117 | |
sunifu | 0:557d73fbbcee | 118 | in.attach(&Update,10); |
sunifu | 0:557d73fbbcee | 119 | |
sunifu | 0:557d73fbbcee | 120 | while(true) |
sunifu | 0:557d73fbbcee | 121 | { |
sunifu | 0:557d73fbbcee | 122 | Net::poll(); |
sunifu | 0:557d73fbbcee | 123 | } |
sunifu | 0:557d73fbbcee | 124 | } |