成功了!用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 再编译的时候还是出现了这个问题。。 ...

同样的问题
  • TA的每日心情
    擦汗
    2019-2-15 20:21
  • 签到天数: 121 天

    [LV.7]常住居民III

    发表于 2017-8-27 15:23 | 显示全部楼层

    我也是 这个问题。大家如果解决了请告知
  • TA的每日心情
    擦汗
    2017-9-19 13:29
  • 签到天数: 88 天

    [LV.6]常住居民II

     楼主| 发表于 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. }
    复制代码


  • TA的每日心情
    开心
    2017-12-4 10:00
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2017-12-5 00:54 来自手机 | 显示全部楼层
    楼主帮忙看看编译时显示unterminated argument list invoking macro"word"这是怎么回事,我用的硬串口Serial1
  • TA的每日心情
    擦汗
    2017-9-19 13:29
  • 签到天数: 88 天

    [LV.6]常住居民II

     楼主| 发表于 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芯片需要如何设置才能使用这段代码?
  • TA的每日心情
    开心
    2019-2-19 12:41
  • 签到天数: 58 天

    [LV.5]常住居民I

    发表于 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语句的修改

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

    本版积分规则

    热门推荐

    一文教你选择Arduino开发板,小白进
    一文教你选择Arduino开发
    笔者在2016年接触了Arduino,跳了万条坑,行了千里弯,到今天也算是Arduino的一
    Arduino官方开发板购买
    Arduino官方开发板购买
    以下为Arduino官方开发板国内购买渠道,点击即可前往淘宝购买 seeedStudio淘宝
    ESP8266-01用Arduino烧写应该选择那一项??
    ESP8266-01用Arduino烧写
    ESP8266-01用Arduino烧写应该选择那一项??还有我用的 是usb串口板340
    酒精传感与超声波传感的使用
    酒精传感与超声波传感的使
    打算超声波传感检测到距离大于10之后就开始酒精浓度检测 下面是代码 mixly提示testArd
    基于Rosbot的声控小夜灯
    基于Rosbot的声控小夜灯
    参赛项目:基于Rosbot的声控小夜灯 参赛组员: 我自己。某单位在职员工,参与单位
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表