ENV III unit on M5Stack CoreInk
-
Hi,
Very n00b question, but how do I use the ENV III sensor on CoreInk? T
From sample code https://docs.m5stack.com/en/unit/envIII, I tried this butUNIT_ENV.hdoes not exist on CoreInk#include "M5CoreInk.h" #include "UNIT_ENV.h" SHT3X sht30; QMP6988 qmp6988;Same
#include "M5_ENV.h"does not exist either.
Thanks. -
Ok - I found. You have to use
#include "M5_ENV.h"and include the library M5UNIT-ENV in Arduino. -
Not sure if you're referring to the hat or port
ENV IIIbut thegetmethod ofSHT3Xdidn't have the correctbeginfor theENV IIIhat, so I brought the method into main and manually set upWire.begin(25, 26)as seen below:#include "M5CoreInk.h" #include "M5_ENV.h" //SHT3X sht30; QMP6988 qmp6988; float tmp = 0.0; float hum = 0.0; float pressure = 0.0; Ink_Sprite InkPageSprite(&M5.M5Ink); void setup() { M5.begin(); Wire.begin(25, 26); qmp6988.init(); if ( !M5.M5Ink.isInit()) { Serial.printf("Ink Init faild"); while (1) delay(100); } M5.M5Ink.clear(); //Clear screen. delay(1000); if ( InkPageSprite.creatSprite(0, 0, 200, 200, true) != 0) { Serial.printf("Ink Sprite creat faild"); } } byte getVal() { unsigned int data[6]; // Start I2C Transmission Wire.beginTransmission(0x44); // Send measurement command Wire.write(0x2C); Wire.write(0x06); // Stop I2C transmission if (Wire.endTransmission() != 0) return 1; delay(200); // Request 6 bytes of data Wire.requestFrom(0x44, 6); // Read 6 bytes of data // cTemp msb, cTemp lsb, cTemp crc, humidity msb, humidity lsb, humidity crc for (int i = 0; i < 6; i++) { data[i] = Wire.read(); }; delay(50); if (Wire.available() != 0) return 2; // Convert the data float cTemp = ((((data[0] * 256.0) + data[1]) * 175) / 65535.0) - 45; tmp = (cTemp * 1.8) + 32; hum = ((((data[3] * 256.0) + data[4]) * 100) / 65535.0); return 0; } void loop() { pressure = qmp6988.calcPressure(); if (getVal() == 0) { char buf[20]; snprintf(buf, 20, "Temp: %2.1f F", tmp); InkPageSprite.drawString(40, 20, buf); snprintf(buf, 20, "Humi: %2.0f%%", hum); InkPageSprite.drawString(40, 40, buf); snprintf(buf, 20, "Pres: %2.0f Pa", pressure); InkPageSprite.drawString(40, 60, buf); } InkPageSprite.pushSprite(); //Push the sprite to the screen. delay(1000); }It's pretty basic in functionality, but it works for the most part. And again, this is for the
ENV IIIhat. -
@vuhn88 Good to know! I also tried last week to run an ENVII on Stamp-C3 but the "get" didn't get! So I put the code inline as you did and it worked fine, then I wrote a new library (with the proven inline code) as a function with Return (value) and that worked as well. (just completed last night!)
The "get" is somehow the problem. Cheers! -
As you have noticed, "Get" isn't a stand alone function instead it is used to retrieve values and so is required to be used with a function.
-
@ajb2k3 The std ENV Library works with Stamp-PICO, but not Stamp-C3.
The GET works with PICO, not C3.
Bringing the library code into the Arduino void loop() works for both products.
I re-wrote the standard library to remove the GET and instead used this:
#include <SHT3Xnew.h>
unsigned int data[2];
float sensor() {
Wire.beginTransmission(0x44);
Wire.write(0x2C);
Wire.write(0x06);
if (Wire.endTransmission() != 0) {
Serial.println("not = 0 ");
}
delay(50);
Wire.requestFrom(0x44, 2);
data[0] = Wire.read();
data[1] = Wire.read();
delay(50);
return ((((data[0] * 256.0) + data[1]) * 175) / 65535.0) - 45;
}This Library works with both, but is just a test, only reads cTemp, ;)
-
@teastain Nice work.
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login