Är jag inne på rätt spår (NodeMCU, arduino ide) för vidare utveckling

Trädvy Permalänk
Medlem
Plats
ronneby
Registrerad
Dec 2010

Är jag inne på rätt spår (NodeMCU, arduino ide) för vidare utveckling

Hej!
Trodde det fanns en sådan där code tag men jag får be om ursäkt om denna tråd skulle vara i programmeringsdelen av forumet.

Sitter och knåpar ihop en fukt och temp övervakning. Använder mig just nu av en NodeMCU klon och har fått något som fungerar hjälpligt.

Min fråga är är detta någon kod som jag kan bygga vidare på?

Min tanke är att kanske sätta upp en bättre webserver än den inbyggda och få med lite snyggare grafik än vad jag misstänker ESP8266 klarar av. Jag har ingen större erfarenhet av "HTML-programmering"eller programmering överhuvudtaget så jag vet inte riktigt hur jag lyfter data från en hemsida till en annan. Hur som helst vill jag inte sätta käppar i hjulet på mig själv i detta stadiet genom att göra det riktigt krångligt att på ett enkelt sätt flytta datan i ett eventuellt senare skede.

Och ja jag vet att det finns flera fina tjänster som jag kan koppla upp min manikel mot och få en fin IOT men vill hålla det lokalt och kanske lära mig något på vägen. Finns ingen annan än jag som är intresserad av datan än iaf.

Mer info om projektet:
Det började på en arduino UNO sedan en arduino Nano därefter en arduino mega sedan flyttade det vidare till en arduino Nano tillsammans med en nrf24L01. Vilket ledde till en fylleshopping av en NodeMCU klon.
NodeMCU är vad jag förstår en breakout board till chippet ESP8266 vilket ger WIFI möjligheter. ESP chippet går att köpa som sensor till arduino familjen men NodeMCU verkar fungera fint och hade fina exempel i ArduinoIDE. Tanken är att det skall till ytterligare minst i DHT11(fukt och temp). Ett problem jag har just nu är att jag inte får igång pinne D0 vilket hade gjort koden lite mer överskådlig kanske. Att sensorerna är på de pinnar de är i koden är för att jag testade om sensorerna fungerar på olika pinnar.
Att jag inte valt att göra projektet på en RPi är att jag började på arduino och att skriva kod i Linux har jag inte lärt mig än. Har för mig det är Phyton jag måste lära mig för att komma åt GPIO.

Framtiden vad jag gissar:
Få in datan till en kraftfullare webserver.
Få in datan i en databas eller en csv fil.
Bestämma mig om jag vill lära mig LAMP eller IIS, har en windows Server 2016 som står och producerar värme.
Phyton verkar vara oundvikligt att behöva lära sig.
Dra nytta av det jag lär mig till nästa projekt.

<code>
#include <ESP8266WiFi.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>

const char* ssid = "ssid";
const char* password = "password";

#define DHTPIN0 D5 // Pin which is connected to the DHT sensor.
#define DHTPIN1 D6 // Pin which is connected to the DHT sensor.
#define DHTPIN2 D7 // Pin which is connected to the DHT sensor.

#define DHTTYPE DHT11 // DHT 11

DHT_Unified dht0(DHTPIN0, DHTTYPE);
DHT_Unified dht1(DHTPIN1, DHTTYPE);
DHT_Unified dht2(DHTPIN2, DHTTYPE);

WiFiServer server(80);

void setup()
{
Serial.begin(115200);
// Connect to WiFi network
Serial.print("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid, password);
// dht.begin();
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");

// Start the server
server.begin();
Serial.println("Server started");

// Print the IP address
Serial.print("Use this URL : ");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.println("/");

// Initialize device.
dht0.begin();
dht1.begin();
dht2.begin();

}

void loop()
{
int dhtTemp[4];
int dhtHumi[4];
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}

// Wait until the client sends some data
Serial.println("new client");
while(!client.available()){
delay(1);
}

// Read the first line of the request
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();

// Return the response
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connnection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<meta http-equiv=\"refresh\" content=\"5\">");
client.println("<br />");
client.println(""); // do not forget this one
/* float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);

if (isnan(h) || isnan(t) || isnan(f))
{
Serial.println("Failed to read from DHT sensor!");
return;
}

client.print("Temperature (C): ");
client.println(t, 1);
client.println("<br />");

client.print("Humidity (%): ");
client.println(h, 0);
client.println("<br />");

client.println("</html>");
Serial.println(t);
Serial.println(h);
*/
// Get temperature event and print its value.
sensors_event_t event;
dht0.temperature().getEvent(&event);
if (isnan(event.temperature)) {
dhtTemp[0] = 111;
}
else {
dhtTemp[0] = event.temperature;
}
// Get humidity event and print its value.
dht0.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
dhtHumi[0] = 111;
}
else {
dhtHumi[0] = event.relative_humidity;
}
dht1.temperature().getEvent(&event);
if (isnan(event.temperature)) {
dhtTemp[1] = 111;
}
else {
dhtTemp[1] = event.temperature;
}
// Get humidity event and print its value.
dht1.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
dhtHumi[1] = 111;
}
else {
dhtHumi[1] = event.relative_humidity;
}
dht2.temperature().getEvent(&event);
if (isnan(event.temperature)) {
dhtTemp[2] = 111;
}
else {
dhtTemp[2] = event.temperature;
}
// Get humidity event and print its value.
dht2.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
dhtHumi[2] = 111;
}
else {
dhtHumi[2] = event.relative_humidity;
}
client.println("Mätvärden +-5%<br />");
for(int i=0; i<3; i++){

client.print("Temp");
client.print(i);
client.print("= ");
client.println(dhtTemp[i]);
client.print("Humidity");
client.print(i);
client.print("= ");
client.println(dhtHumi[i]);
client.println("<br />");
}
client.println("</html>");
delay(2000);
Serial.println("Client disconnected");

}
</code>

Laptop: Asus K53S
Server: HP Microserver N54L, 8 GB ram, 8 TB hd.
Mediaspelare: Chromecast
Min hemmaserver tråd: Min väg till en smidig hemmaserver.

Trädvy Permalänk
Medlem
Plats
~/Karlstad
Registrerad
Dec 2005

För att skriva kod kör du [ istället för < och ] för > d.v.s [ code] och [ /code]
(utan mellanslagen).
Då ser det ut på detta sätt:

#include <ESP8266WiFi.h> #include <Adafruit_Sensor.h> #include <DHT.h> #include <DHT_U.h> const char* ssid = "ssid"; const char* password = "password"; #define DHTPIN0 D5 // Pin which is connected to the DHT sensor. #define DHTPIN1 D6 // Pin which is connected to the DHT sensor. #define DHTPIN2 D7 // Pin which is connected to the DHT sensor. #define DHTTYPE DHT11 // DHT 11 DHT_Unified dht0(DHTPIN0, DHTTYPE); DHT_Unified dht1(DHTPIN1, DHTTYPE); DHT_Unified dht2(DHTPIN2, DHTTYPE); WiFiServer server(80); void setup() { Serial.begin(115200); // Connect to WiFi network Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); // dht.begin(); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("WiFi connected"); // Start the server server.begin(); Serial.println("Server started"); // Print the IP address Serial.print("Use this URL : "); Serial.print("http://"); Serial.print(WiFi.localIP()); Serial.println("/"); // Initialize device. dht0.begin(); dht1.begin(); dht2.begin(); } void loop() { int dhtTemp[4]; int dhtHumi[4]; // Check if a client has connected WiFiClient client = server.available(); if (!client) { return; } // Wait until the client sends some data Serial.println("new client"); while(!client.available()){ delay(1); } // Read the first line of the request String request = client.readStringUntil('\r'); Serial.println(request); client.flush(); // Return the response client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connnection: close"); client.println(); client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.println("<meta http-equiv=\"refresh\" content=\"5\">"); client.println("<br />"); client.println(""); // do not forget this one /* float h = dht.readHumidity(); float t = dht.readTemperature(); float f = dht.readTemperature(true); if (isnan(h) || isnan(t) || isnan(f)) { Serial.println("Failed to read from DHT sensor!"); return; } client.print("Temperature (C): "); client.println(t, 1); client.println("<br />"); client.print("Humidity (%): "); client.println(h, 0); client.println("<br />"); client.println("</html>"); Serial.println(t); Serial.println(h); */ // Get temperature event and print its value. sensors_event_t event; dht0.temperature().getEvent(&event); if (isnan(event.temperature)) { dhtTemp[0] = 111; } else { dhtTemp[0] = event.temperature; } // Get humidity event and print its value. dht0.humidity().getEvent(&event); if (isnan(event.relative_humidity)) { dhtHumi[0] = 111; } else { dhtHumi[0] = event.relative_humidity; } dht1.temperature().getEvent(&event); if (isnan(event.temperature)) { dhtTemp[1] = 111; } else { dhtTemp[1] = event.temperature; } // Get humidity event and print its value. dht1.humidity().getEvent(&event); if (isnan(event.relative_humidity)) { dhtHumi[1] = 111; } else { dhtHumi[1] = event.relative_humidity; } dht2.temperature().getEvent(&event); if (isnan(event.temperature)) { dhtTemp[2] = 111; } else { dhtTemp[2] = event.temperature; } // Get humidity event and print its value. dht2.humidity().getEvent(&event); if (isnan(event.relative_humidity)) { dhtHumi[2] = 111; } else { dhtHumi[2] = event.relative_humidity; } client.println("Mätvärden +-5%<br />"); for(int i=0; i<3; i++){ client.print("Temp"); client.print(i); client.print("= "); client.println(dhtTemp[i]); client.print("Humidity"); client.print(i); client.print("= "); client.println(dhtHumi[i]); client.println("<br />"); } client.println("</html>"); delay(2000); Serial.println("Client disconnected"); }

Indenteringen får du ju med om du kopierar från ditt IDE(om du nu har kodat med det^^)

Ska du ha webserver etc. så kanske inte en Pi är så dum då det är ganska enkelt att komma igång.
Python är inte ett måste för att komma åt GPIO men det finns så mycket bra bibliotek gjorda för GPIO att det kan vara värt att lära sig.

Bara gammalt skräp...