请选择 进入手机版 | 继续访问电脑版
凡是官网购买产品,均可以获得积分,(积分可以用来下载技术资料)还可以获得精致技术支持。零知实验室可提供全套电子方案定制服务,了解详情请咨询客服。           
查看: 4808|回复: 95

【ESP8266教程】OLED天气时钟

[复制链接]

378

主题

2229

帖子

1004

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
1004
发表于 2019-6-13 14:54:57 | 显示全部楼层 |阅读模式
本文演示通过OLED显示一个时钟和天气情况的例子,主要利用的是openweathermap的免费天气API。
1、硬件
(1)需要的模块
- 零知ESP8266开发板  :http://www.lingzhilab.com/index. ... ntroduction?gid=467
-OLED SSD1306模块  :http://www.lingzhilab.com/index. ... introduction?gid=92

(2)接线
接线很简单,I2C接口对应连接即可:
2222.jpg


接好后实物图如下:

IMG_20190605_192427.jpg

2、软件
本次使用了OLED和WeatherStation相关的软件库,因此需要安装对应的库,可以到二楼下载或直接在库管理器中安装。
安装完成后,我们新建工程或打开附件的工程代码:
[C++] 纯文本查看 复制代码
/*
2019年6月13日13:47:26
by 零知实验室
*/

#include <ESPWiFi.h>
#include <ESPHTTPClient.h>
#include <JsonListener.h>

// time
#include <time.h>                       // time() ctime()
#include <sys/time.h>                   // struct timeval
#include <coredecls.h>                  // settimeofday_cb()

#include "SSD1306Wire.h"
#include "OLEDDisplayUi.h"
#include "Wire.h"
#include "OpenWeatherMapCurrent.h"
#include "OpenWeatherMapForecast.h"
#include "WeatherStationFonts.h"
#include "WeatherStationImages.h"


/***************************
 * Begin Settings
 **************************/

// WIFI
const char* WIFI_SSID = "xx";
const char* WIFI_PWD = "xx";

#define TZ              8       // (utc+) TZ in hours
#define DST_MN          60      // use 60mn for summer time in some countries

// Setup
const int UPDATE_INTERVAL_SECS = 20 * 60; // Update every 20 minutes

// Display Settings
const int I2C_DISPLAY_ADDRESS = 0x3c;

const int SDA_PIN = D3;
const int SDC_PIN = D4;

// OpenWeatherMap Settings
// Sign up here to get an API key:
// [url=https://docs.thingpulse.com/how-tos/openweathermap-key/]https://docs.thingpulse.com/how-tos/openweathermap-key/[/url]
String OPEN_WEATHER_MAP_APP_ID = "xxx"; //你的API KEY
/*
Go to [url=https://openweathermap.org/find?q=]https://openweathermap.org/find?q=[/url] and search for a location. Go through the
result set and select the entry closest to the actual location you want to display 
data for. It'll be a URL like [url=https://openweathermap.org/city/2657896.]https://openweathermap.org/city/2657896.[/url] The number
at the end is what you assign to the constant below.
 */
String OPEN_WEATHER_MAP_LOCATION_ID = "1795565"; //city:深圳

// Pick a language code from this list:
// Arabic - ar, Bulgarian - bg, Catalan - ca, Czech - cz, German - de, Greek - el,
// English - en, Persian (Farsi) - fa, Finnish - fi, French - fr, Galician - gl,
// Croatian - hr, Hungarian - hu, Italian - it, Japanese - ja, Korean - kr,
// Latvian - la, Lithuanian - lt, Macedonian - mk, Dutch - nl, Polish - pl,
// Portuguese - pt, Romanian - ro, Russian - ru, Swedish - se, Slovak - sk,
// Slovenian - sl, Spanish - es, Turkish - tr, Ukrainian - ua, Vietnamese - vi,
// Chinese Simplified - zh_cn, Chinese Traditional - zh_tw.
String OPEN_WEATHER_MAP_LANGUAGE = "zh_cn";
const uint8_t MAX_FORECASTS = 4;

const boolean IS_METRIC = true;

// Adjust according to your language
const String WDAY_NAMES[] = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
const String MONTH_NAMES[] = {"JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};

/***************************
 * End Settings
 **************************/
 // Initialize the oled display for address 0x3c
 // sda-pin=14 and sdc-pin=12
 SSD1306Wire     display(I2C_DISPLAY_ADDRESS, SDA_PIN, SDC_PIN);
 OLEDDisplayUi   ui( &display );

OpenWeatherMapCurrentData currentWeather;
OpenWeatherMapCurrent currentWeatherClient;

OpenWeatherMapForecastData forecasts[MAX_FORECASTS];
OpenWeatherMapForecast forecastClient;

#define TZ_MN           ((TZ)*60)
#define TZ_SEC          ((TZ)*3600)
#define DST_SEC         ((DST_MN)*60)
time_t now;

// flag changed in the ticker function every 10 minutes
bool readyForWeatherUpdate = false;

String lastUpdate = "--";

long timeSinceLastWUpdate = 0;

//declaring prototypes
void drawProgress(OLEDDisplay *display, int percentage, String label);
void updateData(OLEDDisplay *display);
void drawDateTime(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y);
void drawCurrentWeather(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y);
void drawForecast(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y);
void drawForecastDetails(OLEDDisplay *display, int x, int y, int dayIndex);
void drawHeaderOverlay(OLEDDisplay *display, OLEDDisplayUiState* state);
void setReadyForWeatherUpdate();


// Add frames
// this array keeps function pointers to all frames
// frames are the single views that slide from right to left
FrameCallback frames[] = { drawDateTime, drawCurrentWeather, drawForecast };
int numberOfFrames = 3;

OverlayCallback overlays[] = { drawHeaderOverlay };
int numberOfOverlays = 1;

void setup() {
  Serial.begin(115200);
  Serial.println();
  Serial.println();

  // initialize dispaly
  display.init();
  display.clear();
  display.display();

  //display.flipScreenVertically();
  display.setFont(ArialMT_Plain_10);
  display.setTextAlignment(TEXT_ALIGN_CENTER);
  display.setContrast(255);

  WiFi.begin(WIFI_SSID, WIFI_PWD);

  int counter = 0;
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    display.clear();
    display.drawString(64, 10, "Connecting to WiFi");
    display.drawXbm(46, 30, 8, 8, counter % 3 == 0 ? activeSymbole : inactiveSymbole);
    display.drawXbm(60, 30, 8, 8, counter % 3 == 1 ? activeSymbole : inactiveSymbole);
    display.drawXbm(74, 30, 8, 8, counter % 3 == 2 ? activeSymbole : inactiveSymbole);
    display.display();

    counter++;
  }
  // Get time from network time service
  configTime(TZ_SEC, DST_SEC, "pool.ntp.org");

  ui.setTargetFPS(30);

  ui.setActiveSymbol(activeSymbole);
  ui.setInactiveSymbol(inactiveSymbole);

  // You can change this to
  // TOP, LEFT, BOTTOM, RIGHT
  ui.setIndicatorPosition(BOTTOM);

  // Defines where the first frame is located in the bar.
  ui.setIndicatorDirection(LEFT_RIGHT);

  // You can change the transition that is used
  // SLIDE_LEFT, SLIDE_RIGHT, SLIDE_TOP, SLIDE_DOWN
  ui.setFrameAnimation(SLIDE_LEFT);

  ui.setFrames(frames, numberOfFrames);

  ui.setOverlays(overlays, numberOfOverlays);

  // Inital UI takes care of initalising the display too.
  ui.init();

  Serial.println("");

  updateData(&display);

}

void loop() {

  if (millis() - timeSinceLastWUpdate > (1000L*UPDATE_INTERVAL_SECS)) {
    setReadyForWeatherUpdate();
    timeSinceLastWUpdate = millis();
  }

  if (readyForWeatherUpdate && ui.getUiState()->frameState == FIXED) {
    updateData(&display);
  }

  int remainingTimeBudget = ui.update();

  if (remainingTimeBudget > 0) {
    // You can do some work here
    // Don't do stuff if you are below your
    // time budget.
    delay(remainingTimeBudget);
  }


}

void drawProgress(OLEDDisplay *display, int percentage, String label) {
  display->clear();
  display->setTextAlignment(TEXT_ALIGN_CENTER);
  display->setFont(ArialMT_Plain_10);
  display->drawString(64, 10, label);
  display->drawProgressBar(2, 28, 124, 10, percentage);
  display->display();
}

void updateData(OLEDDisplay *display) {
  drawProgress(display, 10, "Updating time...");
  drawProgress(display, 30, "Updating weather...");
  currentWeatherClient.setMetric(IS_METRIC);
  currentWeatherClient.setLanguage(OPEN_WEATHER_MAP_LANGUAGE);
  currentWeatherClient.updateCurrentById(¤tWeather, OPEN_WEATHER_MAP_APP_ID, OPEN_WEATHER_MAP_LOCATION_ID);
  drawProgress(display, 50, "Updating forecasts...");
  forecastClient.setMetric(IS_METRIC);
  forecastClient.setLanguage(OPEN_WEATHER_MAP_LANGUAGE);
  uint8_t allowedHours[] = {12};
  forecastClient.setAllowedHours(allowedHours, sizeof(allowedHours));
  forecastClient.updateForecastsById(forecasts, OPEN_WEATHER_MAP_APP_ID, OPEN_WEATHER_MAP_LOCATION_ID, MAX_FORECASTS);

  readyForWeatherUpdate = false;
  drawProgress(display, 100, "Done...");
  delay(1000);
}



void drawDateTime(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
  now = time(nullptr);
  struct tm* timeInfo;
  timeInfo = localtime(&now);
  char buff[16];


  display->setTextAlignment(TEXT_ALIGN_CENTER);
  display->setFont(ArialMT_Plain_10);
  String date = WDAY_NAMES[timeInfo->tm_wday];

  sprintf_P(buff, PSTR("%s, %02d/%02d/%04d"), WDAY_NAMES[timeInfo->tm_wday].c_str(), timeInfo->tm_mday, timeInfo->tm_mon+1, timeInfo->tm_year + 1900);
  display->drawString(64 + x, 5 + y, String(buff));
  display->setFont(ArialMT_Plain_24);

  sprintf_P(buff, PSTR("%02d:%02d:%02d"), timeInfo->tm_hour, timeInfo->tm_min, timeInfo->tm_sec);
  display->drawString(64 + x, 15 + y, String(buff));
  display->setTextAlignment(TEXT_ALIGN_LEFT);
}

void drawCurrentWeather(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
  display->setFont(ArialMT_Plain_10);
  display->setTextAlignment(TEXT_ALIGN_CENTER);
  display->drawString(64 + x, 38 + y, currentWeather.description);

  display->setFont(ArialMT_Plain_24);
  display->setTextAlignment(TEXT_ALIGN_LEFT);
  String temp = String(currentWeather.temp, 1) + (IS_METRIC ? "°C" : "°F");
  display->drawString(60 + x, 5 + y, temp);

  display->setFont(Meteocons_Plain_36);
  display->setTextAlignment(TEXT_ALIGN_CENTER);
  display->drawString(32 + x, 0 + y, currentWeather.iconMeteoCon);
}


void drawForecast(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
  drawForecastDetails(display, x, y, 0);
  drawForecastDetails(display, x + 44, y, 1);
  drawForecastDetails(display, x + 88, y, 2);
}

void drawForecastDetails(OLEDDisplay *display, int x, int y, int dayIndex) {
  time_t observationTimestamp = forecasts[dayIndex].observationTime;
  struct tm* timeInfo;
  timeInfo = localtime(&observationTimestamp);
  display->setTextAlignment(TEXT_ALIGN_CENTER);
  display->setFont(ArialMT_Plain_10);
  display->drawString(x + 20, y, WDAY_NAMES[timeInfo->tm_wday]);

  display->setFont(Meteocons_Plain_21);
  display->drawString(x + 20, y + 12, forecasts[dayIndex].iconMeteoCon);
  String temp = String(forecasts[dayIndex].temp, 0) + (IS_METRIC ? "°C" : "°F");
  display->setFont(ArialMT_Plain_10);
  display->drawString(x + 20, y + 34, temp);
  display->setTextAlignment(TEXT_ALIGN_LEFT);
}

void drawHeaderOverlay(OLEDDisplay *display, OLEDDisplayUiState* state) {
  now = time(nullptr);
  struct tm* timeInfo;
  timeInfo = localtime(&now);
  char buff[14];
  sprintf_P(buff, PSTR("%02d:%02d"), timeInfo->tm_hour, timeInfo->tm_min);

  display->setColor(WHITE);
  display->setFont(ArialMT_Plain_10);
  display->setTextAlignment(TEXT_ALIGN_LEFT);
  display->drawString(0, 54, String(buff));
  display->setTextAlignment(TEXT_ALIGN_RIGHT);
  String temp = String(currentWeather.temp, 1) + (IS_METRIC ? "°C" : "°F");
  display->drawString(128, 54, temp);
  display->drawHorizontalLine(0, 52, 128);
}

void setReadyForWeatherUpdate() {
  Serial.println("Setting readyForUpdate to true");
  readyForWeatherUpdate = true;
}


注意代码里面填写自己的APIkey和要查询的城市名称,这里差的是深圳-shenzhen.

注:为了大家方便,这里提供一个测试账号,仅供测试噢
游客,如果您要查看本帖隐藏内容请回复


完整工程代码:
weather_station1.7z (12.65 KB, 下载次数: 124)
零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

378

主题

2229

帖子

1004

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
1004
 楼主| 发表于 2019-6-28 19:47:23 | 显示全部楼层
Baymax 发表于 2019-6-28 11:25
楼主可否把代码中需要的库打包一份,有些库都找不到,谢谢

可能用到的库:可以直接在库管理器里面安装。



Time.zip

27.77 KB, 下载次数: 76, 下载积分: 积分 -5

json-streaming-parser.zip

11.36 KB, 下载次数: 70, 下载积分: 积分 -5

esp8266-weather-station.zip

930.5 KB, 下载次数: 132, 下载积分: 积分 -5

esp8266-oled-ssd1306.zip

70.98 KB, 下载次数: 77, 下载积分: 积分 -5

Adafruit-GFX.zip

314.02 KB, 下载次数: 111, 下载积分: 积分 -5

Adafruit_SSD1306.zip

31.8 KB, 下载次数: 71, 下载积分: 积分 -5

零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

378

主题

2229

帖子

1004

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
1004
 楼主| 发表于 2019-6-13 15:00:10 | 显示全部楼层
零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

0

主题

2

帖子

0

活跃值

新手上路

Rank: 1

活跃值
0
发表于 2019-6-16 23:54:40 | 显示全部楼层

可惜刚注册没有积分,很难受
回复

使用道具 举报

378

主题

2229

帖子

1004

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
1004
 楼主| 发表于 2019-6-17 09:08:27 | 显示全部楼层
chjunhui 发表于 2019-6-16 23:54
可惜刚注册没有积分,很难受

不会啊,注册了就有默认积分的吧
零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

0

主题

2

帖子

0

活跃值

新手上路

Rank: 1

活跃值
0
发表于 2019-6-17 20:58:58 | 显示全部楼层
roc 发表于 2019-6-17 09:08
不会啊,注册了就有默认积分的吧

那个官方回复的是“论坛还没有调整过来,这几天就在调整中”
回复

使用道具 举报

378

主题

2229

帖子

1004

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
1004
 楼主| 发表于 2019-6-17 21:38:50 | 显示全部楼层
chjunhui 发表于 2019-6-17 20:58
那个官方回复的是“论坛还没有调整过来,这几天就在调整中”

是有100积分的,这里显示问题,这个问题修复好后就正常了,不影响你正常使用
零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

0

主题

2

帖子

50

活跃值

注册会员

Rank: 2

活跃值
50
发表于 2019-6-23 23:09:26 | 显示全部楼层
这个真不错,稍微改改就可以用的以前来的12864绿屏上。
回复

使用道具 举报

0

主题

8

帖子

0

活跃值

新手上路

Rank: 1

活跃值
0
发表于 2019-6-24 14:32:00 | 显示全部楼层
大家有没有试过
回复

使用道具 举报

0

主题

8

帖子

0

活跃值

新手上路

Rank: 1

活跃值
0
发表于 2019-6-24 14:34:23 | 显示全部楼层
chjunhui 发表于 2019-6-16 23:54
可惜刚注册没有积分,很难受

明明有100积分却用不了什么情况
回复

使用道具 举报

0

主题

8

帖子

0

活跃值

新手上路

Rank: 1

活跃值
0
发表于 2019-6-25 10:06:56 | 显示全部楼层
#include <JsonListener.h>报错
回复

使用道具 举报

378

主题

2229

帖子

1004

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
1004
 楼主| 发表于 2019-6-25 11:52:30 | 显示全部楼层

安装这个库: json-streaming-parser.7z (6.33 KB, 下载次数: 11)
零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

0

主题

8

帖子

0

活跃值

新手上路

Rank: 1

活跃值
0
发表于 2019-6-25 13:24:42 | 显示全部楼层

好多库文件报错,怎么回事
回复

使用道具 举报

0

主题

8

帖子

0

活跃值

新手上路

Rank: 1

活跃值
0
发表于 2019-6-25 14:16:43 | 显示全部楼层

#include "SSD1306Wire.h"
#include "OLEDDisplayUi.h"
楼主您好,这两个库文件报错怎么回事啊?
之前的已经不报错了谢谢楼主
回复

使用道具 举报

0

主题

8

帖子

0

活跃值

新手上路

Rank: 1

活跃值
0
发表于 2019-6-25 14:34:03 | 显示全部楼层

楼主您好关于城市编号是在哪里查的,为什么我查出来的是经纬度?我要查寻的是嘉兴
回复

使用道具 举报

378

主题

2229

帖子

1004

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
1004
 楼主| 发表于 2019-6-25 14:44:27 | 显示全部楼层
qccxw 发表于 2019-6-25 14:16
#include "SSD1306Wire.h"
#include "OLEDDisplayUi.h"
楼主您好,这两个库文件报错怎么回事啊?

按照我的教教程里面说的吧库安装好,没有安装就会报错
零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

378

主题

2229

帖子

1004

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
1004
 楼主| 发表于 2019-6-25 14:45:25 | 显示全部楼层
qccxw 发表于 2019-6-25 14:34
楼主您好关于城市编号是在哪里查的,为什么我查出来的是经纬度?我要查寻的是嘉兴 ...

在这里查的:https://openweathermap.org/city/1795565
教程最开始有写是在openweathermap这里
零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

0

主题

8

帖子

0

活跃值

新手上路

Rank: 1

活跃值
0
发表于 2019-6-25 16:33:03 | 显示全部楼层
时间和当地相差一小时,不知道是哪里有问题,城市id都改过了还是这样
回复

使用道具 举报

378

主题

2229

帖子

1004

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
1004
 楼主| 发表于 2019-6-25 18:03:27 | 显示全部楼层
qccxw 发表于 2019-6-25 16:33
时间和当地相差一小时,不知道是哪里有问题,城市id都改过了还是这样

那应该是软件库问题,你用“世界时钟”那个例子中获取时间的方法,那个北京时间当时测试没有误差
零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

0

主题

4

帖子

43

活跃值

新手上路

Rank: 1

活跃值
43
发表于 2019-6-28 11:25:25 | 显示全部楼层
楼主可否把代码中需要的库打包一份,有些库都找不到,谢谢
回复

使用道具 举报

0

主题

4

帖子

43

活跃值

新手上路

Rank: 1

活跃值
43
发表于 2019-6-28 18:55:35 | 显示全部楼层
#include <coredecls.h>   这个库找不到诶
回复

使用道具 举报

378

主题

2229

帖子

1004

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
1004
 楼主| 发表于 2019-6-28 19:49:24 | 显示全部楼层
Baymax 发表于 2019-6-28 18:55
#include    这个库找不到诶

之前教程是按照一定顺序写的,可能之前帖子有,就没有再次说明,已经把几个库放在楼顶
零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

0

主题

5

帖子

46

活跃值

新手上路

Rank: 1

活跃值
46
发表于 2019-7-4 14:57:30 | 显示全部楼层
我想问一下 为什么程序一直报错啊
回复

使用道具 举报

1

主题

32

帖子

594

活跃值

高级会员

Rank: 4

活跃值
594
发表于 2019-7-4 15:12:43 | 显示全部楼层
LW1998 发表于 2019-7-4 14:57
我想问一下 为什么程序一直报错啊

按照教程的要求安装对应的库了没?教程中间有说明需要安装的库哦
回复

使用道具 举报

0

主题

5

帖子

46

活跃值

新手上路

Rank: 1

活跃值
46
发表于 2019-7-4 15:14:31 | 显示全部楼层
LDF 发表于 2019-7-4 15:12
按照教程的要求安装对应的库了没?教程中间有说明需要安装的库哦

没有提示库的安装错误 提示一些代码有问题
回复

使用道具 举报

1

主题

32

帖子

594

活跃值

高级会员

Rank: 4

活跃值
594
发表于 2019-7-4 15:31:05 | 显示全部楼层
LW1998 发表于 2019-7-4 15:14
没有提示库的安装错误 提示一些代码有问题

麻烦你把程序报错信息发出来,方便查找问题
回复

使用道具 举报

0

主题

5

帖子

46

活跃值

新手上路

Rank: 1

活跃值
46
发表于 2019-7-4 15:34:03 | 显示全部楼层
LDF 发表于 2019-7-4 15:31
麻烦你把程序报错信息发出来,方便查找问题

就是这样的


MHP_V8()%MKEGLPB]9JT~@H.png
回复

使用道具 举报

378

主题

2229

帖子

1004

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
1004
 楼主| 发表于 2019-7-4 16:18:45 | 显示全部楼层

开发工具和软件库全部更新到最新版本,然后在库管理器中安装上你没有的库,编译时候选择零知-ESP8266
零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

0

主题

5

帖子

46

活跃值

新手上路

Rank: 1

活跃值
46
发表于 2019-7-4 16:27:58 | 显示全部楼层
roc 发表于 2019-7-4 16:18
开发工具和软件库全部更新到最新版本,然后在库管理器中安装上你没有的库,编译时候选择零知-ESP8266 ...

软件就是最新版的3.31 在编译过程中没有提示库文件不存在 而且我在安装库的时候提示我服务器失败了
回复

使用道具 举报

1

主题

32

帖子

594

活跃值

高级会员

Rank: 4

活跃值
594
发表于 2019-7-4 16:38:00 | 显示全部楼层
LW1998 发表于 2019-7-4 16:27
软件就是最新版的3.31 在编译过程中没有提示库文件不存在 而且我在安装库的时候提示我服务器失败了 ...

软件和软件库是分开下载的,你要确认下更新了最新的软件库没,如果你不记得你的软件库是不是最新的了,可以把现在的软件库删除,再安装最新的,最新软件库下载地址:http://www.lingzhilab.com/download。我刚刚编译了一遍程序是没有报错的。
回复

使用道具 举报

1

主题

32

帖子

594

活跃值

高级会员

Rank: 4

活跃值
594
发表于 2019-7-4 16:50:11 | 显示全部楼层
LW1998 发表于 2019-7-4 16:27
软件就是最新版的3.31 在编译过程中没有提示库文件不存在 而且我在安装库的时候提示我服务器失败了 ...

这几个要使用的库,在最新版都能直接从零知开源开发软件里直接安装,你在 库界面 的安装状态选择未安装,就会有这几个库,安装的时候硬件型号要选择ESP8266
回复

使用道具 举报

1

主题

32

帖子

594

活跃值

高级会员

Rank: 4

活跃值
594
发表于 2019-7-4 16:53:07 | 显示全部楼层
LW1998 发表于 2019-7-4 16:27
软件就是最新版的3.31 在编译过程中没有提示库文件不存在 而且我在安装库的时候提示我服务器失败了 ...

这个贴已经修改了,之前有链接到另一个贴子的库是不需要的了,那个是旧版本的库,只需要现在2楼那些库
回复

使用道具 举报

0

主题

5

帖子

46

活跃值

新手上路

Rank: 1

活跃值
46
发表于 2019-7-4 16:55:53 | 显示全部楼层
LDF 发表于 2019-7-4 16:50
这几个要使用的库,在最新版都能直接从零知开源开发软件里直接安装,你在 库界面 的安装状态选择未安装, ...

每次安装都会提示安装失败
回复

使用道具 举报

1

主题

32

帖子

594

活跃值

高级会员

Rank: 4

活跃值
594
发表于 2019-7-4 17:15:53 | 显示全部楼层
LW1998 发表于 2019-7-4 16:55
每次安装都会提示安装失败

你可以截个图发出来,看下是什么问题
回复

使用道具 举报

0

主题

2

帖子

50

活跃值

注册会员

Rank: 2

活跃值
50
发表于 2019-7-5 10:44:37 | 显示全部楼层
时间会快一个小时。偷懒的解决方法是改时区定义为7.
回复

使用道具 举报

0

主题

1

帖子

1

活跃值

新手上路

Rank: 1

活跃值
1
发表于 2019-7-8 20:57:19 | 显示全部楼层
为啥点下载会显示一个叉然后欢迎来到零知实验室...
回复

使用道具 举报

378

主题

2229

帖子

1004

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
1004
 楼主| 发表于 2019-7-9 09:19:44 | 显示全部楼层
yfy 发表于 2019-7-8 20:57
为啥点下载会显示一个叉然后欢迎来到零知实验室...

截图看下??
零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

0

主题

4

帖子

26

活跃值

新手上路

Rank: 1

活跃值
26
发表于 2019-7-11 15:39:04 | 显示全部楼层
刚发现有如此强大的ESP32,此方案作为第一个研究对象,谢谢!
回复

使用道具 举报

378

主题

2229

帖子

1004

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
1004
 楼主| 发表于 2019-7-11 17:00:17 | 显示全部楼层
human2010 发表于 2019-7-11 15:39
刚发现有如此强大的ESP32,此方案作为第一个研究对象,谢谢!

这个是ESP8266的,ESP32带有蓝牙比这个功能更强大的
零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

0

主题

4

帖子

43

活跃值

新手上路

Rank: 1

活跃值
43
发表于 2019-7-14 16:45:22 | 显示全部楼层
roc 发表于 2019-6-28 19:49
之前教程是按照一定顺序写的,可能之前帖子有,就没有再次说明,已经把几个库放在楼顶 ...

我把您发的所有的库都安装了还是找不到这个库
#include <coredecls.h>                  // settimeofday_cb()
可否发我一个呀,,不胜感激涕零
回复

使用道具 举报

0

主题

1

帖子

46

活跃值

新手上路

Rank: 1

活跃值
46
发表于 2019-7-14 17:28:45 | 显示全部楼层
#include <ESPWiFi.h>报错怎么弄啊
回复

使用道具 举报

378

主题

2229

帖子

1004

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
1004
 楼主| 发表于 2019-7-15 09:14:33 | 显示全部楼层
Baymax 发表于 2019-7-14 16:45
我把您发的所有的库都安装了还是找不到这个库
#include                   // settimeofday_cb()
可否发 ...

报错完整信息看下
零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

378

主题

2229

帖子

1004

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
1004
 楼主| 发表于 2019-7-15 09:15:07 | 显示全部楼层
张光军 发表于 2019-7-14 17:28
#include 报错怎么弄啊

你的没有选择正确的型号吧,这个是零知ESP8266硬件适用的
零知开源-让电子制作变得更简单! --- 零知实验室
回复

使用道具 举报

0

主题

4

帖子

26

活跃值

新手上路

Rank: 1

活跃值
26
发表于 2019-7-17 17:04:51 | 显示全部楼层
本帖最后由 human2010 于 2019-7-17 17:08 编辑

以下是我整理的库文件目录:方便新朋友参考。可用于ESP32。
注意:1.cont.h和coredecls.h只有ESP8266的安装包中才有。
           2.时间小时相差1小时,还在研究中!!!
           3.显示屏根据自己型号选择不同的库(我的是SH1106Wire.h)。
           4.根据需求选择display.flipScreenVertically(); //垂直翻转屏幕


捕获.PNG


cont&amp;coredecls.zip

1.78 KB, 下载次数: 19, 下载积分: 积分 -5

回复

使用道具 举报

34

主题

72

帖子

11

活跃值

版主

Rank: 7Rank: 7Rank: 7

活跃值
11
发表于 2019-7-17 17:11:18 | 显示全部楼层
human2010 发表于 2019-7-17 17:04
以下是我整理的库文件目录:方便新朋友参考。可用于ESP32。
注意:1.cont.h和coredecls.h只有ESP8266的安装 ...

感谢分享
回复

使用道具 举报

0

主题

4

帖子

26

活跃值

新手上路

Rank: 1

活跃值
26
发表于 2019-7-18 16:05:10 | 显示全部楼层
本帖最后由 human2010 于 2019-7-18 16:19 编辑

关于时间相差一小时研究结果:
#define TZ 7      // 设置时区为GMT+8
configTime(TZ_SEC, DST_SEC, "cn.ntp.org.cn");//设置访问服务器        中国提供商

TZ的值从8改为7后,时间就一致了。但根据NTP的介绍,应该是8才对啊???继续查找中。。。

今天顺便研究了一下NTP,以下是相关概念共新朋友参考:

NTP全称是Network Time Protocol,也就是互联网时间协议。

    时区:按照常识来说,一天被划分24小时,近似球体的地球是360度,所以使用经纬度为坐标,将全球划分为24个时区,每个时区是15度;
    东八区:格林尼治时间为世界标准时间,又因为,东半球(格林尼治以东)的时间比较早,中国的经度在120E,是位于第八个时区,这里的中国表示北京或者上海,因为横跨的时区不止一个;
    UTC:Coordinated Universal Time表示协调通用时间,根据原子振荡周期所计算的物理时钟,这种计算方式对于时间的计算误差时很小的;
    GMT:Greenwich Mean Time表示的是格林尼治时间,是根据地球的自转周期计算的标准时间,由于各种不稳定因素的影响,计时不是很理想;
    软件时钟:表示的是LInux[这里指提Linux]操作系统从1970/01/01开始计算的秒数;
    硬件时钟:主机硬件上面的时钟,主要是BIOS内部时间的记录了;

    时间校对的几个步骤
        1.server端启动daemon;
        2.Client向server发送校对时间的报文;
        3.NTP server返回当前的标准时间给Client;
        4.Client根据返回的时间校对自己当前的系统时间;

arduino time是从1970年1月1号零点到现在的秒数,但注意这个得到的是基于格林尼治时间,即GMT+0,如果要在中国的话就要在小时后+8了,同时要注意24小时的取模问题。
STNP TIME时间(基于1900)
unix GMT时间(基于1970)
回复

使用道具 举报

0

主题

4

帖子

26

活跃值

新手上路

Rank: 1

活跃值
26
发表于 2019-7-19 16:55:03 | 显示全部楼层
发现原作者:https://github.com/ThingPulse/esp8266-weather-station

ESP8266气象站入门指南.pdf

5.38 MB, 下载次数: 5, 下载积分: 积分 -5

回复

使用道具 举报

0

主题

4

帖子

43

活跃值

新手上路

Rank: 1

活跃值
43
发表于 2019-7-21 10:23:10 | 显示全部楼层
错误代码:
libraries\esp8266-weather-station-1.6.6\OpenWeatherMapForecast.cpp.o: In function `OpenWeatherMapForecast::getMeteoconIcon(String)':

D:\Arduino\libraries\esp8266-weather-station-1.6.6\src/OpenWeatherMapForecast.cpp:323: undefined reference to `gmtime'

libraries\esp8266-weather-station-1.6.6\OpenWeatherMapForecast.cpp.o.text._ZN22OpenWeatherMapForecast5valueE6String+0xa2): undefined reference to `gmtime'

collect2.exe: error: ld returned 1 exit status

出现这个是什么问题呀,我库好像都安装完成了呀
回复

使用道具 举报

378

主题

2229

帖子

1004

活跃值

管理员

Rank: 9Rank: 9Rank: 9

活跃值
1004
 楼主| 发表于 2019-7-21 10:36:48 来自手机 | 显示全部楼层
Baymax 发表于 2019-7-21 10:23
错误代码:
libraries\esp8266-weather-station-1.6.6\OpenWeatherMapForecast.cpp.o: In function `OpenWe ...

这个是零知平台上测试的,arduino上并没测试过
回复

使用道具 举报

0

主题

1

帖子

71

活跃值

注册会员

Rank: 2

活跃值
71
发表于 2019-8-6 16:20:45 | 显示全部楼层
WeatherStationFonts.h no such file or directory   这个库去哪里找,好像没给到吧,我也没搜索到
回复

使用道具 举报

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

本版积分规则

Archiver| 手机版| 小黑屋| 零知实验室 ( 粤ICP备17040594号-3 )

GMT+8, 2019-12-9 04:56 , Processed in 0.092790 second(s), 25 queries .

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