成功了!用WeeEsp8266库实现获取NTP时间-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[复制链接]
发表于 2017-8-23 20:41 | 显示全部楼层
你好,谢谢您公开您的源码。我编译时遇到一个问题,系统提示'wifi' was not declared in this scope。是在69行,麻烦您能解释一下吗。谢谢
发表于 2017-8-23 20:52 | 显示全部楼层
敢问路在何方 发表于 2017-8-4 20:57
程序使用的是软串,要将libraries里的ESP8266.H里的“//#define ESP8266_USE_SOFTWARE_SERIAL”,改为“# ...

我改过了,还是不行
发表于 2017-8-23 20:54 | 显示全部楼层
丶Life 发表于 2017-7-7 17:08
'wifi' was not declared in this scope   
把库文件都放到libraries 再编译的时候还是出现了这个问题。。 ...

同样的问题
发表于 2017-8-27 15:23 | 显示全部楼层

我也是 这个问题。大家如果解决了请告知
 楼主| 发表于 2017-9-15 21:43 | 显示全部楼层
本帖最后由 敢问路在何方 于 2017-9-15 22:11 编辑
suyangyang 发表于 2017-8-23 20:52
我改过了,还是不行

这是我重新检测过的程序:(在11行就定义了wifi这个对象了呀,应该不会出现你提的错误)

  1. //互联网NTP时间获取
  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);   //使用软串,要将\libraries\WeeESP8266\ESP8266.h里的//#define ESP8266_USE_SOFTWARE_SERIAL前面的“//”删掉
  11. //ESP8266 wifi(Serial1,115200);  //使用MEGA2560的硬串1,19、18脚,要在\libraries\WeeESP8266\ESP8266.h里的#define ESP8266_USE_SOFTWARE_SERIAL前面加“//”
  12. const int NTP_PACKET_SIZE = 48; // NTP 时间戳在返回信息的前48字节里,40——43
  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.     //将缓冲区里所有字节清零
  46.     uint8_t packetBuffer[NTP_PACKET_SIZE] = {0};
  47.     //准备NTP请求数据
  48.     packetBuffer[0] = 0b11100011;   // LI, Version, Mode
  49.     packetBuffer[1] = 0;     // Stratum, or type of clock
  50.     packetBuffer[2] = 6;     // Polling Interval
  51.     packetBuffer[3] = 0xEC;  // Peer Clock Precision
  52.     // 8 bytes of zero for Root Delay & Root Dispersion
  53.     packetBuffer[12]  = 49;
  54.     packetBuffer[13]  = 0x4E;
  55.     packetBuffer[14]  = 49;
  56.     packetBuffer[15]  = 52;
  57.    
  58.     if (wifi.registerUDP(HOST_NAME,HOST_PORT)) {
  59.         Serial.print("register udp ok\r\n");
  60.     } else {
  61.         Serial.print("register udp err\r\n");
  62.     }
  63.     //wifi.send((const uint8_t*)packetBuffer, NTP_PACKET_SIZE);//发送数据   
  64.     wifi.send(packetBuffer, NTP_PACKET_SIZE);//发送数据        
  65.     uint32_t len = wifi.recv(packetBuffer, NTP_PACKET_SIZE, 10000);
  66.     if (len > 0) {//接收到数据
  67.     //从接收包第40个字节开始的4个字为节时间戳,先分别赋值到2 word
  68.     unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
  69.     unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
  70.     //合并4字节成长整型,这就是NTP时间(从1900.1.1开始的秒数)
  71.     unsigned long secsSince1900 = highWord << 16 | lowWord;
  72.     //Serial.print("Seconds since Jan 1 1900 = " );
  73.     //Serial.println(secsSince1900);
  74.     // now convert NTP time into everyday time:
  75.     //Serial.print("Unix time = ");
  76.     // Unix time starts on Jan 1 1970. In seconds, that's 2208988800:
  77.     const unsigned long seventyYears = 2208988800UL;
  78.     // subtract seventy years:
  79.     unsigned long epoch = secsSince1900 - seventyYears;
  80.     // print Unix time:
  81.     //Serial.println(epoch);
  82.     //打印小时、分钟和秒:
  83.     Serial.print("The Beijing time is ");       // 北京时间,东八区
  84.     Serial.print((epoch  % 86400L) / 3600 + 8); // 打印小时 (每天86400秒)
  85.     Serial.print(':');
  86.     if ( ((epoch % 3600) / 60) < 10 ) {
  87.       // 前10分钟加“0”
  88.       Serial.print('0');
  89.     }
  90.     Serial.print((epoch  % 3600) / 60); // print the minute (3600 equals secs per minute)
  91.     Serial.print(':');
  92.     if ( (epoch % 60) < 10 ) {
  93.       // 前10秒加“0”
  94.       Serial.print('0');
  95.     }
  96.     Serial.println(epoch % 60); // print the second
  97.     }
  98.     else {//没有接收到数据
  99.         Serial.println("received failure");
  100.     }
  101.    
  102.     if (wifi.unregisterUDP()) {
  103.         Serial.print("unregister udp ok\r\n");
  104.     } else {
  105.         Serial.print("unregister udp err\r\n");
  106.     }
  107.     delay(5000);
  108. }
复制代码


发表于 2017-12-5 00:54 来自手机 | 显示全部楼层
楼主帮忙看看编译时显示unterminated argument list invoking macro"word"这是怎么回事,我用的硬串口Serial1
 楼主| 发表于 2017-12-7 21:37 | 显示全部楼层
本帖最后由 敢问路在何方 于 2017-12-7 21:38 编辑
15638218949 发表于 2017-12-5 00:54
楼主帮忙看看编译时显示unterminated argument list invoking macro"word"这是怎么回事,我用的硬串口Seria ...

你用硬串口,就要在第10、11行前用“//”,12行的“//”去掉。还要找到在\libraries\WeeESP8266\ESP8266.h里的#define ESP8266_USE_SOFTWARE_SERIAL前面加“//”
发表于 2018-3-26 10:46 | 显示全部楼层
请求一直失败
发表于 2019-2-5 16:53 | 显示全部楼层
敢问路在何方 发表于 2017-9-15 21:43
这是我重新检测过的程序:(在11行就定义了wifi这个对象了呀,应该不会出现你提的错误)

请问,8266芯片需要如何设置才能使用这段代码?
发表于 2019-2-5 20:01 | 显示全部楼层
本帖最后由 wherestheway 于 2019-2-5 20:03 编辑
super-power 发表于 2019-2-5 16:53
请问,8266芯片需要如何设置才能使用这段代码?

ESP8266是不需要设置的,只要SSID和密码设置正确就行。它是通过RX和TX与arduino模块进行通信,关键是arduino模块的串口设置和对应\libraries\WeeESP8266\ESP8266.h里的#define ESP8266_USE_SOFTWARE_SERIAL语句的修改

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-30 23:56 , Processed in 0.299420 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表