Разное о выращивании табака на Алтае
Вы не вошли.
Код, в основном не мой. Компиляция моя.
Не в сети
Не в сети
Не в сети
Прогноз погоды берётся с https://openweathermap.org/
Не в сети
Не в сети
Моя плата по мотивам Fabgl.
Не в сети
Код.
#include <stdio.h>
#include "fabgl.h"
fabgl::VGAController DisplayController;
fabgl::Canvas canvas(&DisplayController);
#define DOUBLEBUFFERING 1
#ifdef ESP8266
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#else // ESP32
#include <WiFi.h>
#endif
#include <JSON_Decoder.h>
#include <OpenWeather.h>
// Just using this library for unix time conversion
#include <Time.h>
char* time_output="";
char* lastNTPtime1="";
const char* NTP_SERVER = "ch.pool.ntp.org";
const char* TZ_INFO = "MSK-6MSD,M3.5.0/2,M10.5.0/3"; //"MSK-6MSD,M3.5.0/2,M10.5.0/3"-ЧАСОВОЙ ПОЯС АЛТАЙСКОГО КРАЯ
// enter your time zone (https://remotemonitoringsystems.ca/time-zone-abbreviations.php)
tm timeinfo;
time_t now;
unsigned long timerSEC;
long unsigned lastNTPtime;
unsigned long lastEntryTime;
int delayInMillis = 0;
int idle = 0;
char hour[9]="";
char minute[9]="";
int hour1=0;
int Simvol=32;
char minute1=0;
char DATopW[30]="";
char simvol[1]="";
char DAT[2]="";
char MES[2]="";
char GOD[4]="";
char sec[2]="";
// =====================================================
// ========= User configured stuff starts here =========
// Further configuration settings can be found in the
// OpenWeather library "User_Setup.h" file
#define TIME_OFFSET 7UL * 3600UL // UTC + 7 hour
// Change to suit your WiFi router
#define WIFI_SSID "Имя вашей сети"
#define WIFI_PASSWORD "Пароль"
// OpenWeather API Details, replace x's with your API key
String api_key = "d828d2d63d3faed54e3e544352a3e4bb";//Мой ключ доступа, но скоро он изменится/перестанет работать.
// Set both your longitude and latitude to at least 4 decimal places
String latitude = "52.53639"; // Широта г.Бийска
String longitude = "85.2072200"; // Долгота г.Бийска
String units = "metric"; // Метрическая система
String language = "ru"; // Язык
// ========= User configured stuff ends here =========
// =====================================================
OW_Weather ow; // Weather forecast library instance
float i=0;
int i1=32;
float temp=-127;
unsigned long timer1;
char a[30]="";
char PRESSURE[10]="";
char HUMIDITY[10]="";
char WIND[10]="";
char TEMP[10]="";
char str1[30]="";
char str2[50]="";
char str3[50]="";
//////////////////////////////////////
void setup() {
DisplayController.begin();
DisplayController.setResolution(VGA_320x200_75Hz);
canvas.selectFont(&fabgl::FONT_std_24);
canvas.clear();
canvas.setPenColor(Color::Green);
canvas.setGlyphOptions(GlyphOptions().FillBackground(false).DoubleWidth(1));
canvas.drawTextFmt(0,10,"WiFi connecting" );
///////////////////////////////////
Serial.begin(115200); // Fast to stop it holding up the stream
Serial.printf("\n\nConnecting to %s\n", WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected\n");
if (WiFi.status() == WL_CONNECTED) {
canvas.setPenColor(Color::Green);
canvas.drawTextFmt(0, 180,"WiFi" );
}
else
{canvas.setPenColor(Color::Red);
canvas.drawTextFmt(0, 180,"WiFi" );
}
printCurrentWeather();
////////////////////////time/////////////
configTime(0, 0, NTP_SERVER);
// See https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv for Timezone codes for your region
setenv("TZ", TZ_INFO, 1);
if (getNTPtime(10)) { // wait up to 10sec to sync
} else {
Serial.println("Time not set");
wifi();
}
showTime(&timeinfo);
lastNTPtime = time(&now);
lastEntryTime = millis();
printVGA();
printVGAtime();
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void wifi(){
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
i=0;
while (WiFi.status() != WL_CONNECTED) {
i++;
printVGA();
canvas.setGlyphOptions(GlyphOptions().FillBackground(false).DoubleWidth(0));
canvas.setPenColor(Color::Red);
canvas.drawTextFmt(270, 180,"WiFi" );
delay(1500);
Serial.print(".");
}
printVGA();
if (WiFi.status() == WL_CONNECTED) {
printVGA();
canvas.setGlyphOptions(GlyphOptions().FillBackground(false).DoubleWidth(0));
canvas.setPenColor(Color::Green);
canvas.drawTextFmt(270, 180,"WiFi" );
}
}
///////////////////////////////////////////////////////////////////////////////////
void printVGAtime(){
canvas.selectFont(&fabgl::FONT_std_24);
canvas.setPenColor(Color::Black);
canvas.setGlyphOptions(GlyphOptions().FillBackground(true).DoubleWidth(2));
canvas.drawTextFmt(0,142," ");
canvas.setGlyphOptions(GlyphOptions().FillBackground(true).DoubleWidth(3));
canvas.drawTextFmt(0,166," ");
canvas.setGlyphOptions(GlyphOptions().FillBackground(true).DoubleWidth(0));
canvas.drawTextFmt(0,180," ");
canvas.setPenColor(Color::Red);
canvas.setGlyphOptions(GlyphOptions().FillBackground(false).DoubleWidth(2));
canvas.drawTextFmt(0,142,hour);
canvas.drawTextFmt(60,142,":");
canvas.drawTextFmt(80,142,minute);
canvas.setGlyphOptions(GlyphOptions().FillBackground(false).DoubleWidth(3));
canvas.drawTextFmt(0,166,hour);
canvas.drawTextFmt(60,166,":");
canvas.drawTextFmt(80,166,minute);
canvas.setGlyphOptions(GlyphOptions().FillBackground(false).DoubleWidth(0));
canvas.drawTextFmt(0,180,str1);
}
///////////////////////////////////////////////////////////////////////////////////
void printVGA(){
canvas.setGlyphOptions(GlyphOptions().FillBackground(false).DoubleWidth(1));
canvas.setBrushColor(Color::Black);
canvas.clear();
canvas.setPenColor(Color::Green);
canvas.drawTextFmt(0, 0,"T: " );
if (temp>=0) canvas.drawTextFmt(40, 0,"+" );// else canvas.drawTextFmt(40, 0,"-" );
canvas.drawTextFmt(90, 0,TEMP );
canvas.drawTextFmt(180, 0,"`C" );
canvas.setPenColor(Color::Yellow);
canvas.drawTextFmt(0, 20,"P: " );
canvas.drawTextFmt(40, 20,PRESSURE);
canvas.drawTextFmt(220, 20,"hPa" );
canvas.drawTextFmt(0, 40,"H: " );
canvas.drawTextFmt(40, 40,HUMIDITY);
canvas.drawTextFmt(0, 60,"W: " );
canvas.drawTextFmt(85, 60,WIND);
canvas.drawTextFmt(200, 60,"m/s" );
canvas.setGlyphOptions(GlyphOptions().FillBackground(false).DoubleWidth(0));
canvas.drawTextFmt(0, 80,DATopW);
}
void loop() {
//////////////////////////////////////////////
if (millis() - timerSEC >= 60000)
{
timerSEC= millis();
getNTPtime(10);
showTime(&timeinfo);
printVGAtime();
}
if (WiFi.status() == WL_CONNECTED) {
canvas.setPenColor(Color::Green);
canvas.drawTextFmt(270, 180,"WiFi" );
}
else
{canvas.setPenColor(Color::Red);
canvas.drawTextFmt(270, 180,"WiFi" );
delay(1500);
wifi();
}
if (millis() - timer1 > 300000)
{
timer1= millis();
printCurrentWeather();
printVGA();
}
}
//////////////////////////////////
bool getNTPtime(int sec) {
{
uint32_t start = millis();
do {
time(&now);
localtime_r(&now, &timeinfo);
Serial.print(".");
delay(10);
} while (((millis() - start) <= (1000 * sec)) && (timeinfo.tm_year < (2016 - 1900)));
if (timeinfo.tm_year <= (2016 - 1900)) return false; // the NTP call was not successful
Serial.print("now "); Serial.println(now);
char time_output[30];
strftime(time_output, 30, "%a %d-%m-%y %T", localtime(&now));
sprintf(str1, "%s", time_output);
Serial.println(time_output);
Serial.println();
}
return true;
}
///////////////////////////
void showTime(tm *localTime) {
//
sprintf(hour, "%d",localTime->tm_hour);
sprintf(minute, "%d",localTime->tm_min);
if (localTime->tm_min<10) {
minute[1]=minute[0];
minute[0]=48;
}
if (localTime->tm_hour<10){
hour[1]=hour[0];
hour[0]=48;
}
sprintf(sec, "%d",localTime->tm_sec);
sprintf(DAT, "%d",localTime->tm_mday);
sprintf(MES, "%d",localTime->tm_mon + 1);
sprintf(GOD, "%d",localTime->tm_year + 1900);
}
/***************************************************************************************
** Send weather info to serial port
***************************************************************************************/
void printCurrentWeather()
{
// OW_Weather ow;
// Create the structures that hold the retrieved weather
OW_current *current = new OW_current;
OW_hourly *hourly = new OW_hourly;
OW_daily *daily = new OW_daily;
Serial.print("\nRequesting weather information from OpenWeather... ");
//On the ESP8266 (only) the library by default uses BearSSL, another option is to use AXTLS
//For problems with ESP8266 stability, use AXTLS by adding a false parameter thus vvvvv
//ow.getForecast(current, hourly, daily, api_key, latitude, longitude, units, language, false);
ow.getForecast(current, hourly, daily, api_key, latitude, longitude, units, language);
Serial.println("Weather from Open Weather\n");
// Position as reported by Open Weather
Serial.print("Latitude : "); Serial.println(ow.lat);
Serial.print("Longitude : "); Serial.println(ow.lon);
// We can use the timezone to set the offset eventually...
Serial.print("Timezone : "); Serial.println(ow.timezone);
Serial.println();
if (current)
{
Serial.println("############### ТЕКУЩАЯ ПОГОДА ###############\n");
strTimeNOW(current->dt);
Serial.print("dt (time) : "); Serial.print(strTime(current->dt));
Serial.print("sunrise : "); Serial.print(strTime(current->sunrise));
Serial.print("sunset : "); Serial.print(strTime(current->sunset));
Serial.print("temp : "); Serial.println(current->temp);
sprintf(TEMP, "%s",String(current->temp));
temp=current->temp;
Serial.print("temp::: "); Serial.println(temp);
Serial.print("TEMP: "); Serial.println(TEMP);
Serial.print("feels_like : "); Serial.println(current->feels_like);
Serial.print("pressure/давление: "); Serial.println(current->pressure);
sprintf(PRESSURE, "%s",String(current->pressure));
Serial.print("humidity : "); Serial.println(current->humidity);
sprintf(HUMIDITY, "%s",String(current->humidity));
Serial.print("dew_point : "); Serial.println(current->dew_point);
Serial.print("uvi : "); Serial.println(current->uvi);
Serial.print("clouds : "); Serial.println(current->clouds);
Serial.print("visibility : "); Serial.println(current->visibility);
Serial.print("wind_speed : "); Serial.println(current->wind_speed);
sprintf(WIND, "%s",String(current->wind_speed));
Serial.print("wind_gust : "); Serial.println(current->wind_gust);
Serial.print("wind_deg : "); Serial.println(current->wind_deg);
Serial.print("rain : "); Serial.println(current->rain);
Serial.print("snow : "); Serial.println(current->snow);
Serial.println();
Serial.print("id : "); Serial.println(current->id);
Serial.print("main : "); Serial.println(current->main);
Serial.print("description : "); Serial.println(current->description);
Serial.print("icon : "); Serial.println(current->icon);
Serial.println();
}
if (hourly)
{
Serial.println("############### ПОЧАСОВАЯ ПОГОДА ###############\n");
for (int i = 0; i < MAX_HOURS; i++)
{
Serial.print("Hourly summary "); if (i < 10) Serial.print(" "); Serial.print(i);
Serial.println();
Serial.print("dt (time) : "); Serial.print(strTime(hourly->dt[i]));
Serial.print("temp : "); Serial.println(hourly->temp[i]);
Serial.print("feels_like : "); Serial.println(hourly->feels_like[i]);
Serial.print("pressure : "); Serial.println(hourly->pressure[i]);
Serial.print("humidity : "); Serial.println(hourly->humidity[i]);
Serial.print("dew_point : "); Serial.println(hourly->dew_point[i]);
Serial.print("clouds : "); Serial.println(hourly->clouds[i]);
Serial.print("wind_speed : "); Serial.println(hourly->wind_speed[i]);
Serial.print("wind_gust : "); Serial.println(hourly->wind_gust[i]);
Serial.print("wind_deg : "); Serial.println(hourly->wind_deg[i]);
Serial.print("rain : "); Serial.println(hourly->rain[i]);
Serial.print("snow : "); Serial.println(hourly->snow[i]);
Serial.println();
Serial.print("id : "); Serial.println(hourly->id[i]);
Serial.print("main : "); Serial.println(hourly->main[i]);
Serial.print("description : "); Serial.println(hourly->description[i]);
Serial.print("icon : "); Serial.println(hourly->icon[i]);
Serial.print("pop : "); Serial.println(hourly->pop[i]);
Serial.println();
}
}
if (daily)
{
Serial.println("############### Daily weather ###############\n");
for (int i = 0; i < MAX_DAYS; i++)
{
Serial.print("Daily summary "); if (i < 10) Serial.print(" "); Serial.print(i);
Serial.println();
Serial.print("dt (time) : "); Serial.print(strTime(daily->dt[i]));
Serial.print("sunrise : "); Serial.print(strTime(daily->sunrise[i]));
Serial.print("sunset : "); Serial.print(strTime(daily->sunset[i]));
Serial.print("temp.morn : "); Serial.println(daily->temp_morn[i]);
Serial.print("temp.day : "); Serial.println(daily->temp_day[i]);
Serial.print("temp.eve : "); Serial.println(daily->temp_eve[i]);
Serial.print("temp.night : "); Serial.println(daily->temp_night[i]);
Serial.print("temp.min : "); Serial.println(daily->temp_min[i]);
Serial.print("temp.max : "); Serial.println(daily->temp_max[i]);
Serial.print("feels_like.morn : "); Serial.println(daily->feels_like_morn[i]);
Serial.print("feels_like.day : "); Serial.println(daily->feels_like_day[i]);
Serial.print("feels_like.eve : "); Serial.println(daily->feels_like_eve[i]);
Serial.print("feels_like.night : "); Serial.println(daily->feels_like_night[i]);
Serial.print("pressure : "); Serial.println(daily->pressure[i]);
Serial.print("humidity : "); Serial.println(daily->humidity[i]);
Serial.print("dew_point : "); Serial.println(daily->dew_point[i]);
Serial.print("uvi : "); Serial.println(daily->uvi[i]);
Serial.print("clouds : "); Serial.println(daily->clouds[i]);
Serial.print("visibility : "); Serial.println(daily->visibility[i]);
Serial.print("wind_speed : "); Serial.println(daily->wind_speed[i]);
Serial.print("wind_gust : "); Serial.println(daily->wind_gust[i]);
Serial.print("wind_deg : "); Serial.println(daily->wind_deg[i]);
Serial.print("rain : "); Serial.println(daily->rain[i]);
Serial.print("snow : "); Serial.println(daily->snow[i]);
Serial.println();
Serial.print("id : "); Serial.println(daily->id[i]);
Serial.print("main : "); Serial.println(daily->main[i]);
Serial.print("description : "); Serial.println(daily->description[i]);
Serial.print("icon : "); Serial.println(daily->icon[i]);
Serial.print("pop : "); Serial.println(daily->pop[i]);
Serial.println();
}
}
// Delete to free up space and prevent fragmentation as strings change in length
delete current;
delete hourly;
delete daily;
}
/***************************************************************************************
** Convert unix time to a time string
***************************************************************************************/
String strTime(time_t unixTime)
{
unixTime += TIME_OFFSET;
return ctime(&unixTime);
}
String strTimeNOW(time_t unixTime)
{
sprintf(DATopW, "%s",ctime(&unixTime));
}
Не в сети
Схема девайса классическая, как у Фабрицио Ди Витторио.
http://www.fabglib.org/schema_VGA64.png
Не в сети