wifi_lux_sensor.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #include <ESP8266WiFi.h>
  2. #include <Wire.h>
  3. #include "config.h"
  4. #include "Adafruit_TSL2561_U.h"
  5. // ----------- DEFINES ---------------
  6. #define LUX_ID 0x39 // I2C-Id of the lux-sensor
  7. // ----------- GLOBALS ---------------
  8. WiFiClient espClient;
  9. Adafruit_TSL2561_Unified tsl = Adafruit_TSL2561_Unified(0x39, 12345);
  10. void connectWifi() {
  11. WiFi.disconnect(false);
  12. Serial.printf("Wi-Fi mode set to WIFI_STA: %s\n", WiFi.mode(WIFI_STA) ? "Ok" : "Failed!");
  13. WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  14. Serial.print("Connecting to ");Serial.println(WIFI_SSID);
  15. while (WiFi.status() != WL_CONNECTED) {
  16. delay(1000);
  17. Serial.print(WiFi.status());
  18. Serial.print(".\r\n");
  19. //WiFi.printDiag(Serial);
  20. }
  21. Serial.println("");
  22. Serial.print("Connected with IP: "),
  23. Serial.println(WiFi.localIP());
  24. Serial.printf("\n");
  25. }
  26. void setup() {
  27. Serial.begin(38400); //Opens USB-Serial connection for terminal
  28. delay(1000);
  29. Serial.println("Init of WiFi-Lux-sensor project");
  30. //connectWifi();
  31. Wire.begin(4, 5); // sda on pin D2, scl on pin D1
  32. tsl.begin();
  33. Serial.println("Set gain.");
  34. // You can change the gain on the fly, to adapt to brighter/dimmer light situations
  35. tsl.setGain(TSL2561_GAIN_1X); // 1x gain (bright light)
  36. //tsl.setGain(TSL2591_GAIN_MED); // 25x gain
  37. //tsl.setGain(TSL2591_GAIN_HIGH); // 428x gain
  38. // Changing the integration time gives you a longer time over which to sense light
  39. // longer timelines are slower, but are good in very low light situtations!
  40. tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS); // shortest integration time (bright light)
  41. //tsl.setTiming(TSL2591_INTEGRATIONTIME_200MS);
  42. //tsl.setTiming(TSL2591_INTEGRATIONTIME_300MS);
  43. //tsl.setTiming(TSL2591_INTEGRATIONTIME_400MS);
  44. //tsl.setTiming(TSL2591_INTEGRATIONTIME_500MS);
  45. //tsl.setTiming(TSL2591_INTEGRATIONTIME_600MS); // longest integration time (dim light)
  46. tsl.enableAutoRange(true);
  47. }
  48. uint32_t readLuxSensor(void)
  49. {
  50. uint16_t broadband;
  51. uint16_t ir;
  52. tsl.getLuminosity(&broadband, &ir);
  53. uint32_t lux = tsl.calculateLux(broadband, ir);
  54. Serial.printf("Lux:%u ", lux);
  55. Serial.print("[ "); Serial.print(millis()); Serial.print(" ms ] ");
  56. Serial.print("IR: "); Serial.print(ir); Serial.print(" ");
  57. Serial.print("broadband: "); Serial.print(broadband); Serial.print(" ");
  58. Serial.print("Visible: "); Serial.print(broadband - ir); Serial.println(" ");
  59. if ( (lux > 4294966000.0) ||
  60. (lux <-4294966000.0) )
  61. {
  62. return 0;
  63. }
  64. else {
  65. return lux;
  66. }
  67. }
  68. unsigned int readI2CRegister16bit(int addr, int reg) {
  69. Wire.beginTransmission(addr);
  70. Wire.write(reg);
  71. Wire.endTransmission();
  72. delay(200);
  73. Wire.requestFrom(addr, 2);
  74. unsigned int t = Wire.read() << 8;
  75. t = t | Wire.read();
  76. return t;
  77. }
  78. void loop() {
  79. // put your main code here, to run repeatedly:
  80. byte error, address;
  81. //unsigned int value = readI2CRegister16bit(0x39, 0xAC);
  82. //Serial.printf("Value:%u\n", value);
  83. /*
  84. Serial.print("WiFi heartbeat - ms since boot: ");
  85. Serial.print(millis());
  86. Serial.println();
  87. */
  88. readLuxSensor();
  89. delay(1000);
  90. }