veranstaltungen:hessen20162:arduino-workshop-notizen

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
veranstaltungen:hessen20162:arduino-workshop-notizen [04.10.2016 10:44] – [LUA Skript zum Auslesen] ipsecguyveranstaltungen:hessen20162:arduino-workshop-notizen [04.10.2016 11:01] (aktuell) – [Arduino Sketch (Programm):] ipsecguy
Zeile 47: Zeile 47:
  
 Der steuernde Rechner kann damit einen Messvorgang auslösen und die Daten empfangen und weiterverarbeiten. Der steuernde Rechner kann damit einen Messvorgang auslösen und die Daten empfangen und weiterverarbeiten.
 +
 +<file text arduino-freifunk.ino>
 +#include <OneWire.h> 
 +OneWire  ds(10);  // on pin 10 (a 4.7K resistor is necessary) 
 +
 +#include "DHT.h" 
 +#define DHTPIN 2     // what digital pin we're connected to 
 +#define DHTTYPE DHT11   // DHT 11 
 +//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321 
 +//#define DHTTYPE DHT21   // DHT 21 (AM2301) 
 +DHT dht(DHTPIN, DHTTYPE); 
 +
 +bool running = false; 
 +
 +void setup(void) { 
 +  pinMode(13, OUTPUT); 
 +  digitalWrite(13, HIGH); 
 +  Serial.begin(9600); 
 +  Serial.setTimeout(1000); 
 +  dht.begin(); 
 +  digitalWrite(13, LOW); 
 +
 +
 +void loop(void) { 
 +  byte i; 
 +  byte present = 0; 
 +  byte type_s; 
 +  byte data[12]; 
 +  byte addr[8]; 
 +  float celsius, fahrenheit; 
 +  float h,t; 
 +
 +  if( !running ){ 
 +    digitalWrite(13, LOW); 
 +    Serial.flush(); //flush all previous received and transmitted data 
 +    while(!Serial.available()){ 
 +      delay(500); 
 +    } 
 +    digitalWrite(13, HIGH); 
 +
 +    Serial.readString(); 
 +    Serial.flush(); //flush all previous received and transmitted data 
 +
 +    running = true; // start execution 
 +  } 
 +
 +if ( !ds.search(addr)) { 
 +    ds.reset_search(); 
 +
 +    //DHT11 Code 
 +    h = dht.readHumidity(); 
 +    t = dht.readTemperature(); 
 +    if (!isnan(h) && !isnan(t)) { 
 +      Serial.print("DHT "); 
 +      Serial.print(t); 
 +      Serial.print(" "); 
 +      Serial.println(h); 
 +    } 
 +    Serial.println("EOF"); 
 +
 +    running = false; // done with this cycle, wait again 
 +    return; 
 +  } 
 +
 +  if (OneWire::crc8(addr, 7) != addr[7]) { 
 +      Serial.println("CRC is not valid!"); 
 +      return; 
 +  }
 +  
 +  // the first ROM byte indicates which chip 
 +  switch (addr[0]) { 
 +    case 0x10: 
 +//      Serial.println("  Chip = DS18S20");  // or old DS1820 
 +      type_s = 1; 
 +      break; 
 +    case 0x28: 
 +//      Serial.println("  Chip = DS18B20"); 
 +      type_s = 0; 
 +      break; 
 +    case 0x22: 
 +//      Serial.println("  Chip = DS1822"); 
 +      type_s = 0; 
 +      break; 
 +    default: 
 +//      Serial.println("Device is not a DS18x20 family device."); 
 +      return; 
 +  }
 +  
 +  ds.reset(); 
 +  ds.select(addr); 
 +  ds.write(0x44, 1); // start conversion, without parasite power 
 + Serial.println(celsius); 
 +
 +
 +</file>
  
 Alternative: der Arduino sammelt im Hintergrund regelmäßig die Messwerte und liefert auf Anfrage die jeweils neuesten aus. Alternative: der Arduino sammelt im Hintergrund regelmäßig die Messwerte und liefert auf Anfrage die jeweils neuesten aus.
Zeile 119: Zeile 214:
 Collectd sammelt Metriken auf Hosts und unterstützt über Plugins eine Vielzahl von Servierprogrammen und läßt sich über generische Plugins leicht erweitern. Das Plugin das ich hier verwende ist das „exec“ plugin, welches beliebige Shell Skripte ausführen kann. Collectd sammelt Metriken auf Hosts und unterstützt über Plugins eine Vielzahl von Servierprogrammen und läßt sich über generische Plugins leicht erweitern. Das Plugin das ich hier verwende ist das „exec“ plugin, welches beliebige Shell Skripte ausführen kann.
  
-<code>+<file text collectd.conf>
 #Hostname   "localhost" #Hostname   "localhost"
 #FQDNLookup  true #FQDNLookup  true
Zeile 147: Zeile 242:
 </Plugin> </Plugin>
  
-</code>+</file>
  
-Collect Netz - ohne Verschlüsselung und Authentisierung+Collectd kann verschlüsseln und/oder authentisieren. Dabei werden vom Clients die Pakete mit Benutzernamen und Passwort versehen und optional auch verschlüsselt. **Leider sind die openwrt collectd Pakete ohne die Crypto gebaut worden. 
 +**
  
 Caveat: das Skript muss unter einem anderen User als „root“ ausgeführt werden. Was auf einem großen Host sinnvoll ist macht auf einem Freifunk Router weniger Sinn. In unserem spezielle Fall müssten man z.B. einen neuen User anlegen und die ttyACM0 mit entsprechenden Rechten versehen. Oder die Schnittstelle für alle User verfügbar machen, beides am besten im Collectd Start Skript. Caveat: das Skript muss unter einem anderen User als „root“ ausgeführt werden. Was auf einem großen Host sinnvoll ist macht auf einem Freifunk Router weniger Sinn. In unserem spezielle Fall müssten man z.B. einen neuen User anlegen und die ttyACM0 mit entsprechenden Rechten versehen. Oder die Schnittstelle für alle User verfügbar machen, beides am besten im Collectd Start Skript.
  • veranstaltungen/hessen20162/arduino-workshop-notizen.1475577887.txt.gz
  • Zuletzt geändert: 04.10.2016 10:44
  • von ipsecguy