فهرست منبع

Выкинул лишнее, чуть поправил нужное.

Vladimir N. Shilov 9 سال پیش
والد
کامیت
42a581fddf
5فایلهای تغییر یافته به همراه112 افزوده شده و 127 حذف شده
  1. 14 0
      README.md
  2. 59 103
      app/application.cpp
  3. 35 14
      app/webserver.cpp
  4. 0 6
      web/api.html
  5. 4 4
      web/index.html

+ 14 - 0
README.md

@@ -81,3 +81,17 @@ int what_day(const struct struct_date  const date)
 в остальное время на нижних чережовать каждые 5 сек темп/влажность (XXc/XXh).
 делать мжно с помощью таймеров и однократного запуска.
 нужно разрисовать подобие КА.
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+2016.02.01
+
+Уберу http-клиент, поменяю чуть сбор данных, json буду отдавать с точностью
+в 2 знака.
+Возмжно попробую добавить udp-сервер и ftp-сервер.
+
+Управление внешним выходом в зависимости от температуры/влажности -- это
+конечно прикольно, но мне в часах оно нахрен не нужно.
+
+Далее в планах -- переделать под себя страницу конфигурации,
+убрать всё лишнее, добавить нужное -- например, задание 2-4 порогов регулировки
+яркости в зависимости от внешнего освещения.

+ 59 - 103
app/application.cpp

@@ -17,29 +17,25 @@ Timer procTimer;
 Timer displayTimer;
 
 bool state = false;
-// Sensors string values
-String StrT, StrRH, StrHI, StrCR, StrCF;
-String oldStrTime, StrTime;
-String StrVDD, StrADC;
+// Sensors values
+float SensorT, SensorH, SensorHI, SensorCR;
+String StrCF;
+// Time values
+String oldStrTime, StrTime, StrTimeLastUpdate;
+//String StrVDD, StrADC;
 
 // date and time
 uint16_t Year, Month, Day, Hour, Minute, Second;
 
-Timer httpcTimer;
-HttpClient thingSpeak;
-
 /* FTPServer ftp; */
 
 void process();
-//void showValues();
 void connectOk();
 void connectFail();
-void onDataSent(HttpClient& client, bool successful);
-void sendData();
 void onNtpReceive(NtpClient& client, time_t timestamp);
 void showTime();
 
-NtpClient ntpClient ("ntps1-0.cs.tu-berlin.de", 60, onNtpReceive);
+NtpClient ntpClient ("ntps1-0.cs.tu-berlin.de", 300, onNtpReceive);
 
 
 void init()
@@ -54,11 +50,7 @@ void init()
 
 	// Select control line
 	pinMode(CONTROL_PIN, OUTPUT);
-	digitalWrite(CONTROL_PIN, LOW);
-
-	// Restart main screen output
-//	procTimer.restart();
-//	serialTimer.stop();
+	PinRes(CONTROL_PIN);
 
 	//wait for sensor startup
 	delay(1000);
@@ -139,60 +131,58 @@ void showTime()
 
 }
 
+/*
+ * ×èòàåì è äàííûå ñ DHT22, â ñëó÷àå íåóäà÷è -- äàííûå îñòàíóòüñÿ ñòàðìè.
+ * ìåíÿ ýòî ïîëíîñòüþ óñòðàèâàåò.
+ */
 void process()
 {
-	float t = dht.readTemperature() + ActiveConfig.AddT;
-	float h = dht.readHumidity() + ActiveConfig.AddRH;
-	float hi = dht.getHeatIndex();
+	PinSet(CONTROL_PIN); // DEBUG
+	TempAndHumidity th;
 	ComfortState cf;
-	float cr = dht.getComfortRatio(cf);
-
-	if (ActiveConfig.Trigger == eTT_Temperature)
-		state = t < ActiveConfig.RangeMin || t > ActiveConfig.RangeMax;
-	else if (ActiveConfig.Trigger == eTT_Humidity)
-		state = h < ActiveConfig.RangeMin || h > ActiveConfig.RangeMax;
-
-	digitalWrite(CONTROL_PIN, state);
-	StrT = String(t, 0);
-	StrRH = String(h, 0);
-	StrHI = String(hi, 0);
-	StrCR = String(cr, 0);
-	switch(cf)
+
+	if(dht.readTempAndHumidity(th))
 	{
-	case Comfort_OK:
-		StrCF = "OK";
-		break;
-	case Comfort_TooHot:
-		StrCF = "Too Hot";
-		break;
-	case Comfort_TooCold:
-		StrCF = "Too Cold";
-		break;
-	case Comfort_TooDry:
-		StrCF = "Too Dry";
-		break;
-	case Comfort_TooHumid:
-		StrCF = "Too Humid";
-		break;
-	case Comfort_HotAndHumid:
-		StrCF = "Hot And Humid";
-		break;
-	case Comfort_HotAndDry:
-		StrCF = "Hot And Dry";
-		break;
-	case Comfort_ColdAndHumid:
-		StrCF = "Cold And Humid";
-		break;
-	case Comfort_ColdAndDry:
-		StrCF = "Cold And Dry";
-		break;
-	default:
-		StrCF = "Unknown";
-		break;
-	}
+		SensorT = th.temp;
+		SensorH = th.humid;
+		SensorHI = dht.getHeatIndex();
+		SensorCR = dht.getComfortRatio(cf);
 
-	StrADC = String(system_adc_read());
-	StrVDD = String(system_get_vdd33());
+		switch(cf)
+		{
+		case Comfort_OK:
+			StrCF = "OK";
+			break;
+		case Comfort_TooHot:
+			StrCF = "Too Hot";
+			break;
+		case Comfort_TooCold:
+			StrCF = "Too Cold";
+			break;
+		case Comfort_TooDry:
+			StrCF = "Too Dry";
+			break;
+		case Comfort_TooHumid:
+			StrCF = "Too Humid";
+			break;
+		case Comfort_HotAndHumid:
+			StrCF = "Hot And Humid";
+			break;
+		case Comfort_HotAndDry:
+			StrCF = "Hot And Dry";
+			break;
+		case Comfort_ColdAndHumid:
+			StrCF = "Cold And Humid";
+			break;
+		case Comfort_ColdAndDry:
+			StrCF = "Cold And Dry";
+			break;
+		default:
+			StrCF = "Unknown";
+			break;
+		}
+	}
+	PinRes(CONTROL_PIN); // DEBUG
 }
 
 /*
@@ -207,14 +197,10 @@ void startFTP()
 
 void connectOk()
 {
-//	debugf("connected");
 	WifiAccessPoint.enable(false);
 	Serial.print("I'm connecteed. IP: ");
 	Serial.println(WifiStation.getIP().toString());
 
-	// Start send data loop
-	httpcTimer.initializeMs(60 * 1000, sendData).start(); // every 60 seconds
-
 	startWebServer();
 
 /*	startFTP(); */
@@ -225,7 +211,6 @@ void connectOk()
  */
 void connectFail()
 {
-//	debugf("connection FAILED");
 	WifiAccessPoint.config("MeteoConfig", "", AUTH_OPEN);
 	WifiAccessPoint.enable(true);
 	// Stop main screen output
@@ -240,40 +225,11 @@ void connectFail()
 }
 
 /*
- * Îòïðàâêà äàííûõ íà âíåøíèé ñåðâåð
- */
-void onDataSent(HttpClient& client, bool successful)
-{
-	if (successful)
-		Serial.println("Success sent");
-	else
-		Serial.println("Failed");
-
-	String response = client.getResponseString();
-	Serial.println("Server response: '" + response + "'");
-	if (response.length() > 0)
-	{
-		int intVal = response.toInt();
-
-		if (intVal == 0)
-			Serial.println("Sensor value wasn't accepted. May be we need to wait a little?");
-	}
-}
-
-void sendData()
-{
-	// We need to wait while request processing was completed
-	if (thingSpeak.isProcessing()) return;
-
-	thingSpeak.downloadString("http://api.thingspeak.com/update?key=26WYU9LJCBC3AE1X&field1=" + StrT + "&field2=" + StrRH + "&field3=" + StrHI, onDataSent);
-}
-
-/*
- * NTP
+ * NTP Client
  */
 void onNtpReceive(NtpClient& client, time_t timestamp) {
 	SystemClock.setTime(timestamp, eTZ_UTC);
-
-	Serial.println("*** Time synchronized! ***");
-//	Serial.println(SystemClock.getSystemTimeString());
+	StrTimeLastUpdate = SystemClock.getSystemTimeString();
+	Serial.println("*** Time synchronized OK! ***"); // DEBUG
+	Serial.println(SystemClock.now()); // DEBUG
 }

+ 35 - 14
app/webserver.cpp

@@ -6,29 +6,38 @@
 
 bool serverStarted = false;
 HttpServer server;
-extern String StrT, StrRH, StrHI, StrCR, StrCF; // Sensors string values
 
+extern float SensorT, SensorH, SensorHI, SensorCR;
+extern String StrCF, StrTimeLastUpdate; // Sensors values
+
+/*
+ * Index page.
+ * Show dht22 data as integer.
+ */
 void onIndex(HttpRequest &request, HttpResponse &response)
 {
 	TemplateFileStream *tmpl = new TemplateFileStream("index.html");
 	auto &vars = tmpl->variables();
-	vars["T"] = StrT;
-	vars["RH"] = StrRH;
-	vars["HI"] = StrHI;
-	vars["CR"] = StrCR;
-	vars["CF"] = StrCF;
+	vars["T"] = String(SensorT, 0);
+	vars["RH"] = String(SensorH, 0);
+	vars["HI"] = String(SensorHI, 0);
+	vars["CR"] = String(SensorCR, 0);
+	vars["CF"] = StrCF; // ïîõîæå ýòî åäèíñòâåííîå ìåñòî, ãäå îíî èñïîëüçóåòñÿ
 	vars["ADC"] = String(system_adc_read());
 	vars["VDD"] = String(system_get_vdd33());
 	vars["TIME"] = SystemClock.getSystemTimeString();
+	vars["LASTNTP"] = StrTimeLastUpdate;
 	response.sendTemplate(tmpl);
 }
 
+/*
+ * Configuration page.
+ */
 void onConfiguration(HttpRequest &request, HttpResponse &response)
 {
 	MeteoConfig cfg = loadConfig();
 	if (request.getRequestMethod() == RequestMethod::POST)
 	{
-//		debugf("Update config");
 		// Update config
 		if (request.getPostParameter("SSID").length() > 0) // Network
 		{
@@ -52,7 +61,6 @@ void onConfiguration(HttpRequest &request, HttpResponse &response)
 		response.redirect();
 	}
 
-//	debugf("Send template");
 	TemplateFileStream *tmpl = new TemplateFileStream("config.html");
 	auto &vars = tmpl->variables();
 	vars["SSID"] = cfg.NetworkSSID;
@@ -65,6 +73,9 @@ void onConfiguration(HttpRequest &request, HttpResponse &response)
 	response.sendTemplate(tmpl);
 }
 
+/*
+ * õç.
+ */
 void onFile(HttpRequest &request, HttpResponse &response)
 {
 	String file = request.getPath();
@@ -81,7 +92,9 @@ void onFile(HttpRequest &request, HttpResponse &response)
 }
 
 /// API ///
-
+/*
+ * API page.
+ */
 void onApiDoc(HttpRequest &request, HttpResponse &response)
 {
 	TemplateFileStream *tmpl = new TemplateFileStream("api.html");
@@ -90,23 +103,31 @@ void onApiDoc(HttpRequest &request, HttpResponse &response)
 	response.sendTemplate(tmpl);
 }
 
+/*
+ * Gt json data
+ * äàííûå ñ äàò÷èêîâ âûäà¸ì ñ ìàêñèìàëüíûì ðàçðåøåíèåì.
+ */
 void onApiSensors(HttpRequest &request, HttpResponse &response)
 {
 	JsonObjectStream* stream = new JsonObjectStream();
 	JsonObject& json = stream->getRoot();
 	json["status"] = (bool)true;
 	JsonObject& sensors = json.createNestedObject("sensors");
-	sensors["temperature"] = StrT.c_str();
-	sensors["humidity"] = StrRH.c_str();
-	sensors["heatindex"] = StrHI.c_str();
-	sensors["comfortp"] = StrCR.c_str();
-	sensors["comforts"] = StrCF.c_str();
+	sensors["temperature"] = String(SensorT, 2);
+	sensors["humidity"] = String(SensorH, 2);
+	sensors["heatindex"] = String(SensorHI, 2);
+	sensors["comfortp"] = String(SensorCR, 2);
+	sensors["comforts"] = StrCF.c_str(); // àãà, åù¸ òóò :-)
 	sensors["adcvalue"] = String(system_adc_read());
 	sensors["vddvalue"] = String(system_get_vdd33());
 	sensors["datetime"] = SystemClock.getSystemTimeString();
+	sensors["lastntp"] = StrTimeLastUpdate.c_str();
 	response.sendJsonObject(stream);
 }
 
+/*
+ * Óïðàâëåíèå âûâîäîì. êàíäèäàò íà óäàëåíèå.
+ */
 void onApiOutput(HttpRequest &request, HttpResponse &response)
 {
 	int val = request.getQueryParameter("control", "-1").toInt();

+ 0 - 6
web/api.html

@@ -13,12 +13,6 @@
 	<style>
 		.main { font-size: 63px; }
 	</style>
-	
-    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
-    <!--[if lt IE 9]>
-      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
-      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
-    <![endif]-->
   </head>
 
   <body>

+ 4 - 4
web/index.html

@@ -92,20 +92,20 @@
 			<div class="col-xs-10 col-md-5">
 			  <div class="panel panel-default">
 				<div class="panel-heading">
-				  <h3 class="panel-title">VDD33</h3>
+				  <h3 class="panel-title">SystemTime</h3>
 				</div>
 				<div class="panel-body">
-				  <h1 class="text-center main">{VDD}</h1>
+				  <h1 class="text-center main">{TIME}</h1>
 				</div>
 			  </div>
 			</div>
 			<div class="col-xs-10 col-md-5">
 			  <div class="panel panel-default">
 				<div class="panel-heading">
-				  <h3 class="panel-title">SystemTime</h3>
+				  <h3 class="panel-title">Last NTP Update</h3>
 				</div>
 				<div class="panel-body">
-				  <h1 class="text-center main">{TIME}</h1>
+				  <h1 class="text-center main">{LASTNTP}</h1>
 				</div>
 			  </div>
 			</div>