Hallo,
ich bin gerade an einem Projekt in dem ich ein e-ink display ansteuern will und zusätzlich einen Temperatur Sensor auslesen will.
Mein Problem ist das wenn ich die Library für das waveshare 1.54 " e-ink display nutze und zugleich das display mit spi initialisiere bekomme ich willkürliche werte von dem Sensor. Egal ob der Sensor angesteckt ist oder nicht
verkabelt ist es wie folgt
waveshare:
Busy -> D6 (12)
RST -> D4
DC -> D3
CS -> D8
CLK -> D5
DIN -> D7
GND -> GND
VCC -> None (because i get a mem_error when it is connected to 3.3v)
SI7021:
SCL -> D2 (4)
SDA -> D2 (5)
GND -> GND
3.3v -> 3.3v
this is my program so far with the edp2 library
Code:
#include <Wire.h>
// SI7021 I2C address is 0x40(64)
#define si7021Addr 0x40
// base class GxEPD2_GFX can be used to pass references or pointers to the display instance as parameter, uses ~1.2k more code
// enable or disable GxEPD2_GFX base class
#define ENABLE_GxEPD2_GFX 0
#include <GxEPD2_BW.h>
#include <GxEPD2_3C.h>
#include <Fonts/FreeMonoBold9pt7b.h>
#if defined (ESP8266)
// 3-color e-papers
GxEPD2_3C<GxEPD2_154c, GxEPD2_154c::HEIGHT> display(GxEPD2_154c(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 12));
#endif
#if defined(_BOARD_GENERIC_STM32F103C_H_)
#define MAX_DISPAY_BUFFER_SIZE 15000ul // ~15k is a good compromise
#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPAY_BUFFER_SIZE / (EPD::WIDTH / 8))
#define MAX_HEIGHT_3C(EPD) (EPD::HEIGHT <= (MAX_DISPAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8))
#endif
#if defined(__AVR)
#define MAX_DISPAY_BUFFER_SIZE 800 //
#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPAY_BUFFER_SIZE / (EPD::WIDTH / 8))
#define MAX_HEIGHT_3C(EPD) (EPD::HEIGHT <= (MAX_DISPAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8))
#endif
void setup()
{
Serial.begin(115200);
Serial.println("Setup");
Wire.begin();
Wire.beginTransmission(si7021Addr);
Wire.endTransmission();
display.init(115200);
delay(300);
}
void loop()
{
unsigned int data[2];
Wire.beginTransmission(si7021Addr);
//Send humidity measurement command
Wire.write(0xF5);
Wire.endTransmission();
delay(500);
// Request 2 bytes of data
Wire.requestFrom(si7021Addr, 2);
// Read 2 bytes of data to get humidity
if(Wire.available() == 2)
{
data[0] = Wire.read();
data[1] = Wire.read();
}
// Convert the data
float humidity = ((data[0] * 256.0) + data[1]);
humidity = (((125 * humidity) / 65536.0) - 6)/1000;
Wire.beginTransmission(si7021Addr);
// Send temperature measurement command
Wire.write(0xF3);
Wire.endTransmission();
delay(500);
// Request 2 bytes of data
Wire.requestFrom(si7021Addr, 2);
// Read 2 bytes of data for temperature
if(Wire.available() == 2)
{
data[0] = Wire.read();
data[1] = Wire.read();
}
// Convert the data
float temp = ((data[0] * 256.0) + data[1]);
float celsTemp = ((175.72 * temp) / 65536.0) - 46.85;
float fahrTemp = celsTemp * 1.8 + 32;
// Output data to serial monitor
Serial.print("Humidity : ");
Serial.print(humidity);
Serial.println(" % RH");
Serial.print("Celsius : ");
Serial.print(celsTemp);
Serial.println(" C");
Serial.print("Fahrenheit : ");
Serial.print(fahrTemp);
Serial.println(" F");
delay(1000);
}
void helloWorld(int i)
{
Serial.println("helloWorld");
display.setRotation(1);
display.setFont(&FreeMonoBold9pt7b);
display.setTextColor(GxEPD_RED);
uint16_t x = (display.width() - 160) / 2;
uint16_t y = display.height() / 2;
display.setFullWindow();
display.firstPage();
do
{
display.fillScreen(GxEPD_WHITE);
display.setCursor(20,115);
display.println(String(i));
display.setCursor(x, y);
display.println(String(x) + " " +String(y) );
}
while (display.nextPage());
//Serial.println("helloWorld done");
}
egal ob ich bei diesem code die pins sda und sdc verbunden habe gibt er mir immer die selben werte in der console aus.
Was mach ich genau falsch. Bin relativ neu in der elektrotechnik. Brauche ich dort evtl einen Pull up resistor oder so
Lesezeichen