WEMOS_SHT3x_Arduino_Library
WEMOS_SHT3x_Arduino_Library copied to clipboard
Wire.requestFrom() library problem
I get this compile error, but the sketch uploads fine afterwards and works on the Wemos.
I have two sensor defined in the sketch:
SHT3X indoor(0x45); //0x45 is the default address with connection not soldered //0x44 is with soldered blob
SHT3X outdoor(0x44); // changed address by shorting connections with solder
Any ideas?
In file included from C:\Program Files (x86)\Arduino\libraries\WEMOS_SHT3x_Arduino_Library-master\src\WEMOS_SHT3X.h:12:0,
from C:\Program Files (x86)\Arduino\libraries\WEMOS_SHT3x_Arduino_Library-master\src\WEMOS_SHT3X.cpp:1:
C:\Users\877\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\libraries\Wire/Wire.h: In member function 'byte SHT3X::get()':
C:\Users\877\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\libraries\Wire/Wire.h:70:13: note: candidate 1: uint8_t TwoWire::requestFrom(int, int)
uint8_t requestFrom(int, int);
^
C:\Users\877\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\libraries\Wire/Wire.h:68:13: note: candidate 2: uint8_t TwoWire::requestFrom(uint8_t, uint8_t)
uint8_t requestFrom(uint8_t, uint8_t);
^
Sketch uses 329376 bytes (31%) of program storage space. Maximum is 1044464 bytes.
Global variables use 31300 bytes (38%) of dynamic memory, leaving 50620 bytes for local variables. Maximum is 81920 bytes.
I changed the code to:
uint8_t sht30_indoor_address = 0x45;
SHT3X indoor(sht30_indoor_address);
uint8_t sht30_outdoor_address = 0x44;
SHT3X outdoor(sht30_outdoor_address);
but still get an error message when compiling:
In file included from C:\Program Files (x86)\Arduino\libraries\WEMOS_SHT3x_Arduino_Library-master\src\WEMOS_SHT3X.h:12:0,
from C:\Program Files (x86)\Arduino\libraries\WEMOS_SHT3x_Arduino_Library-master\src\WEMOS_SHT3X.cpp:1:
C:\Users\877\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\libraries\Wire/Wire.h: In member function 'byte SHT3X::get()':
C:\Users\877\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\libraries\Wire/Wire.h:70:13: note: candidate 1: uint8_t TwoWire::requestFrom(int, int)
uint8_t requestFrom(int, int);
^
C:\Users\877\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\libraries\Wire/Wire.h:68:13: note: candidate 2: uint8_t TwoWire::requestFrom(uint8_t, uint8_t)
uint8_t requestFrom(uint8_t, uint8_t);
^
Sketch uses 329396 bytes (31%) of program storage space. Maximum is 1044464 bytes.
Global variables use 31304 bytes (38%) of dynamic memory, leaving 50616 bytes for local variables. Maximum is 81920 bytes.
This is an internal problem inside the library: Wire.requestFrom(_address, 6);
The Wire.requestFrom() parameters should be fixed.
The line is here: https://github.com/wemos/WEMOS_SHT3x_Arduino_Library/blob/master/src/WEMOS_SHT3X.cpp#L30
The _address is in the object and is a uint8_t, and the default is an 'int' for a number. That means the Wire.requestFrom(_address, 6) uses Wire.requestFrom(uint8_t, int). That function does not exist, the compiler tells that there are two options:
- Wire.requestFrom(uint8_t, uint8_t)
- Wire.requestFrom(int, int)
I think this will fix it:
Wire.requestFrom(_address, (uint8_t) 6);
This is the same as https://github.com/wemos/WEMOS_SHT3x_Arduino_Library/issues/7 and this pull request: https://github.com/wemos/WEMOS_SHT3x_Arduino_Library/pull/8/files But the library is not changed.