Skocz do zawartości

Wemos d1 mini pro


k23456

Pomocna odpowiedź

Witam,
jestem początkujący i mam problem. chciałbym podłączyć do Wemos D1 mini pro LCD Nokia 5110 oraz czujnik bme680. Jak podłączę oddzielnie to działa, jak razem to nie działa LCD ani bme680. Bme 680 działa tylko po I2C.

Oba mają działać po I2c. Przeczytałem, że muszę podać adresy urządzeń w funkcji Wire i podnieś rezystorami 4,7 napięcie Sda i SCl do 5V. Wemos działa na 3.3V. Czy to dobra droga?

Proszę o pomoc w rozwiązaniu tego problemu. Dziękuję.

Link do komentarza
Share on other sites

Gość es2

Droga dobra,
Poczytaj o I2C i adresowaniu peryferii.

Następnie poczytaj o nieudolnych bibliotekach I2C dla Arduino. Pobaw się nimi i na ich podstawie napisz swoje. Arduino to DEMO, pokazuje, że można ale sensowne wykorzystanie jest dyskusyjne. Właśnie pisze własna bibliotekę dla ESP8266 do SSD1306 bo ta ogólnie dostępna nadaje się tylko jako demo.

Kolejna sprawa, chcesz aby pomóc a kod programu jest TopSecret. Jak więc mam ci pomóc? Zgadywać co tam namalowałeś?

Kod to jedno, spier.... biblioteki to inna sprawa. Dołączaj kod bibliotek, bo tam często kryją się błędy.

Link do komentarza
Share on other sites

Witam,
przesyłam kod:

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include "Adafruit_PCD8544.h"
#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"

#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10

#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME680 bme; // I2C

// ESP8266 Hardware SPI:
// pin 14 D5 SCK -  LCD serial clock (SCLK) 5
// pin 13 D7 MOSI - LCD DIN 4
// pin 12 D6 MISO - Data/Command select (D/C) 3
// pin 5 D1 - LCD chip select (CS) 2
// pin 4 D2 - LCD reset (RST) 1
Adafruit_PCD8544 display = Adafruit_PCD8544(12, 5, 4);

void setup()   {
 Serial.begin(9600);
 while (!Serial){Serial.println("NOT OK");};
 Serial.println(F("BME680 test"));
 if (!bme.begin()) {
   Serial.println("Could not find a valid BME680 sensor, check wiring!");
  }
 display.begin();
 display.setContrast(60);
 display.clearDisplay();

 display.setTextSize(1);
 display.setTextColor(BLACK);
 display.setCursor(0,0);

 while (!Serial);
 Serial.println(F("test BME680"));

 if (!bme.begin()) {
   Serial.println("Nie znaleziono czujnika BME680!");
   while (1);
 }
 bme.setTemperatureOversampling(BME680_OS_8X);
}

void loop() {
 display.clearDisplay();
 display.print("Temp=");
 display.print(bme.temperature);
 display.println("*C");
 display.display();
 delay(2000);
}
Link do komentarza
Share on other sites

Gość es2

Kod jest a kod bibliotek o którym pisałem gdzie?

Program jest, jak sie domyślam, ten co nie działa. Co w nim nie działa? Jakie są komunikaty w serial monitorze?

Pokaż też kody, które działają.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Gość es2

Informacje z kolego trzeba wyciągać jak od ucznia podczas sprawdzania zakresu wiedzy. Kody bibliotek są a gdzie

Program jest, jak sie domyślam, ten co nie działa. Co w nim nie działa? Jakie są komunikaty w serial monitorze?

Pokaż też kody, które działają.

Link do komentarza
Share on other sites

w załącznikach (w tych 2 plikach które poprzednio dołączyłem) są następujące pliki Adafruit_bme680.cpp, Adafruit_bme680.h, Adafruit_pcd8544.cpp, Adafruit_pcd8544.h, bme680.c, bme680.h, bme680_defs.h

Link do komentarza
Share on other sites

Gość es2

Nadal nie wiem jakie sa objawy niedziałania. Czy tak ciężko to napisać?

W bibliotece dla LCD

/*********************************************************************
This is a library for our Monochrome Nokia 5110 LCD Displays

 Pick one up today in the adafruit shop!
 ------> http://www.adafruit.com/products/338

These displays use SPI to communicate, 4 or 5 pins are required to  
interface

Adafruit invests time and resources providing this open source code, 
please support Adafruit and open-source hardware by purchasing 
products from Adafruit!

Written by Limor Fried/Ladyada  for Adafruit Industries.  
BSD license, check license.txt for more information
All text above, and the splash screen must be included in any redistribution
*********************************************************************/
#ifndef _ADAFRUIT_PCD8544_H
#define _ADAFRUIT_PCD8544_H

#if defined(ARDUINO) && ARDUINO >= 100
 #include "Arduino.h"
#else
 #include "WProgram.h"
 #include "pins_arduino.h"
#endif

#include <SPI.h>

#ifdef __SAM3X8E__
 typedef volatile RwReg PortReg;
 typedef uint32_t PortMask;
#else
 typedef volatile uint8_t PortReg;
 typedef uint8_t PortMask;
#endif


#define BLACK 1
#define WHITE 0

#define LCDWIDTH 84
#define LCDHEIGHT 48

#define PCD8544_POWERDOWN 0x04
#define PCD8544_ENTRYMODE 0x02
#define PCD8544_EXTENDEDINSTRUCTION 0x01

#define PCD8544_DISPLAYBLANK 0x0
#define PCD8544_DISPLAYNORMAL 0x4
#define PCD8544_DISPLAYALLON 0x1
#define PCD8544_DISPLAYINVERTED 0x5

// H = 0
#define PCD8544_FUNCTIONSET 0x20
#define PCD8544_DISPLAYCONTROL 0x08
#define PCD8544_SETYADDR 0x40
#define PCD8544_SETXADDR 0x80

// H = 1
#define PCD8544_SETTEMP 0x04
#define PCD8544_SETBIAS 0x10
#define PCD8544_SETVOP 0x80

// Default to max SPI clock speed for PCD8544 of 4 mhz (16mhz / 4) for normal Arduinos.
// This can be modified to change the clock speed if necessary (like for supporting other hardware).
#define PCD8544_SPI_CLOCK_DIV SPI_CLOCK_DIV4

class Adafruit_PCD8544 : public Adafruit_GFX {
public:
 // Software SPI with explicit CS pin.
 Adafruit_PCD8544(int8_t SCLK, int8_t DIN, int8_t DC, int8_t CS, int8_t RST);
 // Software SPI with CS tied to ground.  Saves a pin but other pins can't be shared with other hardware.
 Adafruit_PCD8544(int8_t SCLK, int8_t DIN, int8_t DC, int8_t RST);
 // Hardware SPI based on hardware controlled SCK (SCLK) and MOSI (DIN) pins. CS is still controlled by any IO pin.
 // NOTE: MISO and SS will be set as an input and output respectively, so be careful sharing those pins!
 Adafruit_PCD8544(int8_t DC, int8_t CS, int8_t RST);

 void begin(uint8_t contrast = 40, uint8_t bias = 0x04);

 void command(uint8_t c);
 void data(uint8_t c);

 void setContrast(uint8_t val);
 void clearDisplay(void);
 void display();

 void drawPixel(int16_t x, int16_t y, uint16_t color);
 uint8_t getPixel(int8_t x, int8_t y);

private:
 int8_t _din, _sclk, _dc, _rst, _cs;
 volatile PortReg  *mosiport, *clkport;
 PortMask mosipinmask, clkpinmask;

 void spiWrite(uint8_t c);
 bool isHardwareSPI();
};

#endif

Nigdzie nie ma mowy o I2C. Jak ma więc działać po I2C?

Jak więc wyświetlacz działał?

Jak podłączę oddzielnie to działa, jak razem to nie działa LCD ani bme680

Narysuj schemat jak to podłączasz gdy działa jak gdy nie.

Link do komentarza
Share on other sites

jak wgram program przykładowy do Nokii - pcdtest.ino to działa - wyświetlana są przykładowe dane,
jak podepnę pod d1 id2 czujnik bme680 to przestaje wyświetlać, a czujnik wg dokumentacji ma być podpięty pod d1 i d2, które te piny są wykorzystywane przez ekran Nokii,

Link do komentarza
Share on other sites

Gość es2

Prosiłem o schemat połączeń ale go nie widzę. Pewny jesteś, że LCD od Noki jest podłączony po I2C?

Link do komentarza
Share on other sites

Wemos D1 mini pro: Nokia LCD pin:

D5 Clk 5

D7 DIN 4

D6 DC 3

D1 CE 2

D2 Rst 1

3.3V Vcc 6

3.3V Blk 7

Gnd Gnd 8

w kodzie:

Adafruit_PCD8544 display = Adafruit_PCD8544(12, 5, 4);

Wemos D1 mini pro: BME680:

D1 D1

D2 D2

GND GND

3.3V 3.3V

[ Dodano: 14-05-2018, 16:39 ]

LCD podłączony jest do SPI. Moja pomyłka.

Wemos D1 mini pro: Nokia LCD pin:

D5 Clk 5

D7 DIN 4

D6 DC 3

D1 CE 2

D2 Rst 1

3.3V Vcc 6

3.3V Blk 7

Gnd Gnd 8

w kodzie:

Adafruit_PCD8544 display = Adafruit_PCD8544(12, 5, 4);

Wemos D1 mini pro: BME680:

D1 D1

D2 D2

GND GND

3.3V 3.3V

Link do komentarza
Share on other sites

Gość es2

Widać wyraźnie, że LCD komunikuje sie po SPI a nie I2C. Widać tez konflikt linii D1 i D2.

Link do komentarza
Share on other sites

podłączyłem Lcd Nokii wg opisu link i jak tylko podłączam Bme680 przez d1 i d2 to nie działa. Może to wina tego że zasilam Lcd i czujnik z Usb Wemos-a. Może podłączyć zasilanie Lcd oddzielnie?

Link do komentarza
Share on other sites

Gość es2
podłączyłem Lcd Nokii wg opisu link

Czyli przez SPI. Z pierwszego postu wnioskuję że przez I2C.

jestem początkujący i mam problem. chciałbym podłączyć do Wemos D1 mini pro LCD Nokia 5110 oraz czujnik bme680. Jak podłączę oddzielnie to działa, jak razem to nie działa LCD ani bme680

Co do wypowiedzi:

i jak tylko podłączam Bme680 przez d1 i d2 to nie działa. Może to wina tego że zasilam Lcd i czujnik z Usb Wemos-a. Może podłączyć zasilanie Lcd oddzielnie?

Przeczytaj jeszcze raz moja poprzednia wypowiedź. Napisałem wyraźnie gdzie leży problem.

Zastanów sie też nad tym

Oba mają działać po I2c.

Sprawdź jaki sterownik ma wyświetlacz od Noki. Nie napisałeś nawet od jakiej Noki. Nie dałeś fotki modułu, bo pewnie używasz modułu wyświetlacza a nie samego LCD. Jeśli to jest ten najpopularniejszy na portalach aukcyjnych jak"Aledrogo" to nie da sie go bezpośrednio podłączyć do I2C.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.