mbed/ARM 活用事例 第6章 mbedをネットワークにつなげよう!

Dependencies:   EthernetNetIf NTPClient_NetServices TextLCD mbed

Committer:
sunifu
Date:
Tue Oct 04 13:27:49 2011 +0000
Revision:
0:557d73fbbcee

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }