查看: 19958|回复: 45

成功了!用WeeEsp8266库实现获取NTP时间

[复制链接]
  • TA的每日心情
    擦汗
    2017-9-19 13:29
  • 签到天数: 88 天

    [LV.6]常住居民II

    发表于 2016-6-30 16:10 | 显示全部楼层 |阅读模式
    本帖最后由 敢问路在何方 于 2016-7-1 21:34 编辑

    要使用软串的话,要将ESP8266.H里的“//#define ESP8266_USE_SOFTWARE_SERIAL”,改为“#define ESP8266_USE_SOFTWARE_SERIAL”,就是去掉那两根斜杠。

    1. //互联网时间获取
    2. #include "ESP8266.h"
    3. #include <SoftwareSerial.h>
    4. #define SSID        "这里输入你家的wifi名称"
    5. #define PASSWORD    "你家wifi密码"
    6. #define HOST_NAME   "ntp.sjtu.edu.cn"//互联网授时服务器
    7. #define HOST_PORT   (123)            //端口为123
    8. //SoftwareSerial mySerial(10,11); // RX, TX,使用MEGA2560的软串
    9. SoftwareSerial mySerial(2,3); // RX, TX,使用NANO的软串
    10. ESP8266 wifi(mySerial,115200);//使用软串
    11. //ESP8266 wifi(Serial1,115200);//使用MEGA2560的硬串1,19、18脚
    12. const int NTP_PACKET_SIZE = 48; // NTP time stamp is in the first 48 bytes of the message
    13. int i;
    14. void setup(void)
    15. {
    16.     Serial.begin(115200);
    17.     Serial.print("setup begin\r\n");
    18.    
    19.     Serial.print("FW Version: ");
    20.     Serial.println(wifi.getVersion().c_str());
    21.    
    22.     if (wifi.setOprToStationSoftAP()) {
    23.         Serial.print("to station + softap ok\r\n");
    24.     } else {
    25.         Serial.print("to station + softap err\r\n");
    26.     }

    27.     if (wifi.joinAP(SSID, PASSWORD)) {
    28.         Serial.print("Join AP success\r\n");
    29.         Serial.print("IP: ");      
    30.         Serial.println(wifi.getLocalIP().c_str());
    31.     } else {
    32.         Serial.print("Join AP failure\r\n");
    33.     }
    34.    
    35.     if (wifi.disableMUX()) {
    36.         Serial.print("single ok\r\n");
    37.     } else {
    38.         Serial.print("single err\r\n");
    39.     }
    40.    
    41.     Serial.print("setup end\r\n");
    42. }

    43. void loop(void)
    44. {
    45. // send an NTP request to the time server at the given address
    46. //unsigned long sendNTPpacket()
    47.   // set all bytes in the buffer to 0
    48.     uint8_t packetBuffer[NTP_PACKET_SIZE] = {0};
    49.   // Initialize values needed to form NTP request
    50.   // (see URL above for details on the packets)
    51.   //Serial.println("2");
    52.   packetBuffer[0] = 0b11100011;   // LI, Version, Mode
    53.   packetBuffer[1] = 0;     // Stratum, or type of clock
    54.   packetBuffer[2] = 6;     // Polling Interval
    55.   packetBuffer[3] = 0xEC;  // Peer Clock Precision
    56.   // 8 bytes of zero for Root Delay & Root Dispersion
    57.   packetBuffer[12]  = 49;
    58.   packetBuffer[13]  = 0x4E;
    59.   packetBuffer[14]  = 49;
    60.   packetBuffer[15]  = 52;
    61.     if (wifi.registerUDP(HOST_NAME,HOST_PORT)) {
    62.         Serial.print("register udp ok\r\n");
    63.     } else {
    64.         Serial.print("register udp err\r\n");
    65.     }
    66.     wifi.send((const uint8_t*)packetBuffer, NTP_PACKET_SIZE);   
    67.    
    68.     uint32_t len = wifi.recv(packetBuffer, NTP_PACKET_SIZE, 10000);
    69.     if (len > 0) {
    70.     //the timestamp starts at byte 40 of the received packet and is four bytes,
    71.     // or two words, long. First, esxtract the two words:
    72.     unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
    73.     unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
    74.     // combine the four bytes (two words) into a long integer
    75.     // this is NTP time (seconds since Jan 1 1900):
    76.     unsigned long secsSince1900 = highWord << 16 | lowWord;
    77.     Serial.print("Seconds since Jan 1 1900 = " );
    78.     Serial.println(secsSince1900);
    79.     // now convert NTP time into everyday time:
    80.     Serial.print("Unix time = ");
    81.     // Unix time starts on Jan 1 1970. In seconds, that's 2208988800:
    82.     const unsigned long seventyYears = 2208988800UL;
    83.     // subtract seventy years:
    84.     unsigned long epoch = secsSince1900 - seventyYears + 8 * 3600;
    85.     // print Unix time:
    86.     Serial.println(epoch);
    87.     // print the hour, minute and second:
    88.     Serial.print("The Beijing time is ");       // UTC is the time at Greenwich Meridian (GMT)
    89.     Serial.print((epoch  % 86400L) / 3600 ); // print the hour (86400 equals secs per day)
    90.     Serial.print(':');
    91.     if ( ((epoch % 3600) / 60) < 10 ) {
    92.       // In the first 10 minutes of each hour, we'll want a leading '0'
    93.       Serial.print('0');
    94.     }
    95.     Serial.print((epoch  % 3600) / 60); // print the minute (3600 equals secs per minute)
    96.     Serial.print(':');
    97.     if ( (epoch % 60) < 10 ) {
    98.       // In the first 10 seconds of each minute, we'll want a leading '0'
    99.       Serial.print('0');
    100.     }
    101.     Serial.println(epoch % 60); // print the second
    102.     }
    103.     else {
    104.         Serial.println("received failure");
    105.     }
    106.    
    107.     if (wifi.unregisterUDP()) {
    108.         Serial.print("unregister udp ok\r\n");
    109.     } else {
    110.         Serial.print("unregister udp err\r\n");
    111.     }
    112.     delay(5000);
    113. }
    复制代码

    该用户从未签到

    发表于 2016-7-1 10:58 | 显示全部楼层
    楼主,用的什么库呢
  • TA的每日心情
    开心
    2018-10-15 14:57
  • 签到天数: 39 天

    [LV.5]常住居民I

    发表于 2016-7-1 15:02 | 显示全部楼层
    本帖最后由 yuqingshan 于 2016-7-1 15:18 编辑

    楼主啊,能共享您的ESP8266.h库文件吗?谢谢网上下载:ITEADLIB_Arduino_ESP8266-master 的库文件,改名为:ESP8266,但无法通过编译的!
  • TA的每日心情
    擦汗
    2017-9-19 13:29
  • 签到天数: 88 天

    [LV.6]常住居民II

     楼主| 发表于 2016-7-1 21:20 | 显示全部楼层
    本帖最后由 敢问路在何方 于 2016-7-1 21:24 编辑
    yuqingshan 发表于 2016-7-1 15:02
    楼主啊,能共享您的ESP8266.h库文件吗?谢谢网上下载:ITEADLIB_Arduino_ESP8266-master 的库文件,改名为 ...

    没问题。不过,92行代码里有一个错误,应该将“+8”删掉,在87行加“+8*3600”。如果不清楚,再下一次我的程序,已经改正了。

    ITEADLIB_Arduino_WeeESP8266-master.zip

    418.56 KB, 下载次数: 383

  • TA的每日心情
    擦汗
    2017-9-19 13:29
  • 签到天数: 88 天

    [LV.6]常住居民II

     楼主| 发表于 2016-7-1 21:32 | 显示全部楼层
    yuqingshan 发表于 2016-7-1 15:02
    楼主啊,能共享您的ESP8266.h库文件吗?谢谢网上下载:ITEADLIB_Arduino_ESP8266-master 的库文件,改名为 ...

    11和17行的波特率要改为115200
  • TA的每日心情
    开心
    2018-11-20 15:33
  • 签到天数: 248 天

    [LV.8]以坛为家I

    发表于 2016-7-1 22:27 来自手机 | 显示全部楼层
    以前我也想知道怎么弄的,
    打赏作者鼓励一下!
  • TA的每日心情
    开心
    2017-10-19 17:48
  • 签到天数: 45 天

    [LV.5]常住居民I

    发表于 2016-7-3 21:47 | 显示全部楼层
    zhangke0504 发表于 2016-7-1 22:27
    以前我也想知道怎么弄的,

    请问ESP8266是怎么连接网络的,里面没写程序和设置,是不是直接把程序写到ARDUINO里,接上ESO8266程序会自动写到ESP8266里呢?不很懂,请指点下,谢谢。
    setup begin
    FW Version:
    to station + softap err
    Join AP failure
    single err
    setup end
  • TA的每日心情
    开心
    2017-10-19 17:48
  • 签到天数: 45 天

    [LV.5]常住居民I

    发表于 2016-7-3 21:58 | 显示全部楼层
    请问ESP8266是怎么连接网络的,里面没写程序和设置,是不是直接把程序写到ARDUINO里,接上ESO8266程序会自动写到ESP8266里呢?不很懂,请指点下,谢谢。 setup begin FW Version:  to station + softap err Join AP failure single err setup end
  • TA的每日心情
    擦汗
    2017-9-19 13:29
  • 签到天数: 88 天

    [LV.6]常住居民II

     楼主| 发表于 2016-7-4 20:19 | 显示全部楼层
    本帖最后由 敢问路在何方 于 2016-7-4 20:32 编辑
    Peter58 发表于 2016-7-3 21:58
    请问ESP8266是怎么连接网络的,里面没写程序和设置,是不是直接把程序写到ARDUINO里,接上ESO8266程序会自 ...

    第23行就是设置Wi-Fi的工作模式,第29行就是加入到你家的Wi-Fi网络。是这样的,程序是写到arduino面,而arduino是通过调用库文件直接发指令给ESP 8266模块执行网络的连接、设置等。出现你所列的信息,有可能是因为模块没有激活,所以设置成功后返回的不是OK,程序没有检测到OK,出现err,但实际上它已经设置正确了。你让程序重新运行就会一路OK。另外一种情况是你Rx和Tx没接对,D2接ESP8266的TXD,D3接ESP8266的RXD。
  • TA的每日心情
    开心
    2017-10-19 17:48
  • 签到天数: 45 天

    [LV.5]常住居民I

    发表于 2016-7-5 22:25 | 显示全部楼层
    谢谢回复,我用的是ESP28266-12的模块
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    利用MICRO:BIT制作的飞机小游戏
    利用MICRO:BIT制作的飞机
    一.项目名称: 利用MICRO:BIT制作的飞机小游戏二.制作目的: 带孩子多了解micro:bit
    全过程展示:PWM自定义、测速、PID调速、PID自整定
    全过程展示:PWM自定义、
    有一天,电控小白在某宝上买来了一块Arduino Mega2560、一款直流电机。小白想:“这款
    OneNET之星再度闪耀 物联网创客马拉松大赛正式启动
    OneNET之星再度闪耀 物联
    4月9日,2019中国移动OneNET之星2.0物联网创客马拉松正式上线。大赛由中国移动集
    求助!!!!
    求助!!!!
    想借助数据上传工具将串口数据传到乐联网,结果一直上传失败,实在不知道怎么修
    BLE胸带+GPS墨水屏运动心率表(0421更新代码及原理图)
    BLE胸带+GPS墨水屏运动心
    0421了更新代码原理状语从句:打图产品板的PCB已经到达本市。 项目简介: 我喜欢
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表