diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 796435d03..3e4973403 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -47,7 +47,7 @@ The following binary downloads have been compiled with ESP8266/Arduino library c - **tasmota-zbbridge.bin** = The dedicated Sonoff Zigbee Bridge version. - **tasmota-minimal.bin** = The Minimal version allows intermediate OTA uploads to support larger versions and does NOT change any persistent parameter. This version **should NOT be used for initial installation**. -Binaries for ESP8266 based devices can be downloaded from http://ota.tasmota.com/tasmota/release. Binaries for ESP32 based devices can be downloaded from http://ota.tasmota.com/tasmota32/release. The base links can be used for OTA upgrades like ``OtaUrl http://ota.tasmota.com/tasmota/release/tasmota.bin`` +The attached binaries can also be downloaded from http://ota.tasmota.com/tasmota/release for ESP8266 or http://ota.tasmota.com/tasmota32/release for ESP32. The links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmota.com/tasmota/release/tasmota.bin`` [List](MODULES.md) of embedded modules. @@ -61,3 +61,5 @@ Binaries for ESP8266 based devices can be downloaded from http://ota.tasmota.com - Fix crash in ``ZbRestore`` - Add new shutter modes (#9244) - Add ``#define USE_MQTT_AWS_IOT_LIGHT`` for password based AWS IoT authentication +- Add Zigbee auto-config when pairing +- Add support for MLX90640 IR array temperature sensor by Christian Baars diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md index d07791a2e..66a086bd6 100644 --- a/tasmota/CHANGELOG.md +++ b/tasmota/CHANGELOG.md @@ -9,6 +9,7 @@ - Add new shutter modes (#9244) - Add ``#define USE_MQTT_AWS_IOT_LIGHT`` for password based AWS IoT authentication - Add Zigbee auto-config when pairing +- Add support for MLX90640 IR array temperature sensor by Christian Baars ### 8.5.0 20200907 diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index d74cecfe5..f2673bda6 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -558,7 +558,7 @@ // #define USE_VEML7700 // [I2cDriver50] Enable VEML7700 Ambient Light sensor (I2C addresses 0x10) (+4k5 code) // #define USE_MCP9808 // [I2cDriver51] Enable MCP9808 temperature sensor (I2C addresses 0x18 - 0x1F) (+0k9 code) // #define USE_HP303B // [I2cDriver52] Enable HP303B temperature and pressure sensor (I2C address 0x76 or 0x77) (+6k2 code) -// #define USE_MLX90640 // [I2cDriver53] Enable MLX90640 IR array temperature sensor (I2C address 0x33) (+4k9 code) +// #define USE_MLX90640 // [I2cDriver53] Enable MLX90640 IR array temperature sensor (I2C address 0x33) (+20k code) // #define USE_DISPLAY // Add I2C Display Support (+2k code) #define USE_DISPLAY_MODES1TO5 // Enable display mode 1 to 5 in addition to mode 0 diff --git a/tasmota/support_features.ino b/tasmota/support_features.ino index d7f8328d3..50da89faa 100644 --- a/tasmota/support_features.ino +++ b/tasmota/support_features.ino @@ -601,8 +601,9 @@ void GetFeatures(void) #ifdef USE_I2S_AUDIO feature6 |= 0x00800000; // xdrv_42_i2s_audio.ino #endif - -// feature6 |= 0x01000000; +#ifdef USE_MLX90640 + feature6 |= 0x01000000; // xdrv_43_mlx90640.ino +#endif // feature6 |= 0x02000000; // feature6 |= 0x04000000; // feature6 |= 0x08000000; diff --git a/tasmota/xdrv_84_MLX90640.ino b/tasmota/xdrv_43_mlx90640.ino similarity index 98% rename from tasmota/xdrv_84_MLX90640.ino rename to tasmota/xdrv_43_mlx90640.ino index a1016c917..88832acc6 100644 --- a/tasmota/xdrv_84_MLX90640.ino +++ b/tasmota/xdrv_43_mlx90640.ino @@ -1,5 +1,5 @@ /* - xdrv_84_MLX90640.ino - MLX90640 support for Tasmota + xdrv_43_mlx90640.ino - MLX90640 support for Tasmota Copyright (C) 2020 Christian Baars and Theo Arends @@ -33,7 +33,7 @@ * MLX90640 \*********************************************************************************************/ -#define XDRV_84 84 +#define XDRV_43 43 #define XI2C_53 53 // See I2CDEVICES.md #include @@ -144,7 +144,7 @@ const char HTTP_MLX90640_2a_SNS_COMPRESSED[] PROGMEM = "\x33\xBF\xA0\xB7\x9A\x3E #else const char HTTP_MLX90640_2a_SNS[] PROGMEM = "var line = 0;" - "setInterval(function() {" + "setInterval(function() {" "rl('ul',line);" // 0 = do NOT force refresh "},200);" "function rl(s,v){" //source, value @@ -209,7 +209,7 @@ const char HTTP_MLX90640_2b_SNS[] PROGMEM = "for (var j=0;j<32;j++){" "var y = 239 - Math.floor(map(rA[(i*32)+j],0,40,0,239));" // 40 is max. temp for heat map // console.log(gPx.data[y],gPx.data[y+1],gPx.data[y+2]); - "octx.fillStyle = 'rgb(' + gPx.data[(y*4)] + ',' + gPx.data[(y*4)+1] +',' + gPx.data[(y*4)+2] + ')';" + "octx.fillStyle = 'rgb(' + gPx.data[(y*4)] + ',' + gPx.data[(y*4)+1] +',' + gPx.data[(y*4)+2] + ')';" "octx.fillRect(j*1,i*1,1,1);" "}" "}" @@ -254,7 +254,7 @@ const char HTTP_MLX90640_3a_SNS[] PROGMEM = "rO.deleteContents();" "for(var p in poi){" //"console.log('poi:'+ poi[p][0]);" - "var c=150;" + "var c=150;" "if(eb('poiL').value==p){c=255;}" // "console.log(c);" "ctx.fillStyle = 'rgba('+c+','+c+','+c+',0.6)';" @@ -411,18 +411,18 @@ void MLX90640UpdateGUI(void){ void MLX90640HandleWebGuiResponse(void){ char tmp[(MLX90640_POI_NUM*2)+4]; WebGetArg("ul", tmp, sizeof(tmp)); // update line - if (strlen(tmp)) { + if (strlen(tmp)) { uint8_t _line = atoi(tmp); // AddLog_P2(LOG_LEVEL_DEBUG, "MLX90640: send line %u", _line); float _buf[65]; - if(_line==0){_buf[0]=1000+MLX90640.Ta;} //ambient temperature modulation hack + if(_line==0){_buf[0]=1000+MLX90640.Ta;} //ambient temperature modulation hack else{_buf[0]=(float)_line;} memcpy((char*)&_buf[1],(char*)&MLX90640.To[_line*64],64*4); Webserver->send(200,PSTR("application/octet-stream"),(const char*)&_buf,65*4); return; } WebGetArg("up", tmp, sizeof(tmp)); // update POI to browser - if (strlen(tmp)==1) { + if (strlen(tmp)==1) { Webserver->send(200,PSTR("application/octet-stream"),(const char*)&MLX90640.pois,MLX90640_POI_NUM*2); return; } @@ -591,7 +591,7 @@ void MLX90640Show(uint8_t json) * Interface \*********************************************************************************************/ -bool Xdrv84(uint8_t function) +bool Xdrv43(uint8_t function) { bool result = false;