main.ino 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. #include <ESP8266WiFi.h>
  2. #include <Automaton.h>
  3. #include <OneWire.h>
  4. #include <DallasTemperature.h>
  5. #include <DS18B20Events.h>
  6. // Pin for DS18B20
  7. int one_wire_bus = 4;
  8. int mcu_flash_button = 0;
  9. Atm_button mcubtn;
  10. int led1_pin = 13;
  11. Atm_led led1;
  12. int poti_pin = A0;
  13. Atm_analog poti;
  14. int dial_pin_1 = 12;
  15. int dial_pin_2 = 14;
  16. Atm_encoder dial;
  17. float shouldTemp = 0;
  18. float isTemp = 100;
  19. bool wpsRunning = false;
  20. // Init Onewire and DallasTemperature
  21. OneWire oneWire(one_wire_bus);
  22. DallasTemperature sensor(&oneWire);
  23. Atm_timer sensorTimer;
  24. //Init thermometer with index 0 (default)
  25. DS18B20Events thermometer(0);
  26. void setup() {
  27. delay(2000);
  28. Serial.begin(115200);
  29. Serial.println("Booting...");
  30. // led1.trace( Serial );
  31. // mcubtn.trace( Serial );
  32. led1.begin( led1_pin ); // .blink( 1000 );
  33. mcubtn.begin( mcu_flash_button )
  34. .onPress([] (int idx, int v, int up ) {
  35. wpsSetup();
  36. } );
  37. // .onPress( led1, led1.EVT_TOGGLE );
  38. dial.begin(dial_pin_1, dial_pin_2, 1)
  39. .range( 1, 120 )
  40. .onChange( [] (int idx, int v, int up ) {
  41. shouldTemp = (float)v;
  42. // Serial.printf("Raw: %d ShouldTemp: %.10f\n", v, shouldTemp);
  43. checkTemp();
  44. });
  45. /*
  46. poti.begin( poti_pin )
  47. .onChange( [] (int idx, int v, int up ) {
  48. shouldTemp = (float)v / 20.0;
  49. // Serial.printf("Raw: %d ShouldTemp: %.10f\n", v, shouldTemp);
  50. checkTemp();
  51. });
  52. // sensorTimer.trace( Serial );
  53. */
  54. DS18B20Events::setup(&sensor); // Link DS18B20Events to DallasTemperature object
  55. DS18B20Events::setInterval(200); // Set min interval in milliseconds between 2 measurements. Default 10000 set in setup() method.
  56. sensorTimer.begin( 100 )
  57. .repeat( ATM_COUNTER_OFF )
  58. .onTimer( [] (int idx, int v, int up ) {
  59. thermometer.loop();
  60. } )
  61. .start();
  62. thermometer.onChange = temperatureChanged;
  63. Serial.println("Wifi Setup...");
  64. WiFi.mode(WIFI_STA);
  65. WiFi.begin(WiFi.SSID().c_str(),WiFi.psk().c_str());
  66. Serial.println("Setup Done.");
  67. }
  68. void loop() {
  69. // thermometer.loop(); // Mandatory to measure temperature and fire an event if needed
  70. // Serial.println("Hello World");
  71. // digitalWrite(13, HIGH);
  72. // delay(1000);
  73. // digitalWrite(13, LOW);
  74. // delay(1000);
  75. automaton.run();
  76. }
  77. void temperatureChanged(uint8_t index, float tempC)
  78. {
  79. if (tempC > 0){
  80. isTemp = tempC;
  81. // Serial.printf("isTemp: %.10f index %d\n", isTemp, index);
  82. checkTemp();
  83. }
  84. }
  85. void wpsSetup(){
  86. if (wpsRunning){
  87. Serial.println("WPS already running");
  88. } else {
  89. Serial.println("WPS Config started");
  90. bool wpsSuccess = WiFi.beginWPSConfig();
  91. Serial.printf("wpsSuccess: '%s'\n", boolToString(wpsSuccess));
  92. if(wpsSuccess) {
  93. // Muss nicht immer erfolgreich heißen! Nach einem Timeout bist die SSID leer
  94. String newSSID = WiFi.SSID();
  95. if(newSSID.length() > 0) {
  96. // Nur wenn eine SSID gefunden wurde waren wir erfolgreich
  97. Serial.printf("WPS fertig. Erfolgreich angemeldet an SSID '%s'\n", newSSID.c_str());
  98. }
  99. }
  100. }
  101. }
  102. unsigned long lastCheck;
  103. void checkTemp(){
  104. if (isTemp < shouldTemp){
  105. led1.on();
  106. } else {
  107. led1.off();
  108. }
  109. if ((millis() - lastCheck) > 1000) {
  110. Serial.printf("%d,%.10f,%.10f\n", millis(),shouldTemp,isTemp);
  111. lastCheck = millis();
  112. }
  113. }
  114. String boolToString(bool in){
  115. return in ? "true" : "false";
  116. }