Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
peter
Člen
Avatar
peter:18.1.2020 22:55

Dobrý deň,
robím ročníkový projekt a vopred chcem povedať, že sa v programovaní moc nevyznám. Potreboval by som však vedieť, že ako donútiť komunikovať medzi sebou dosku ESP 8266 a Wemos D1 R1.

Doska esp8266 je na NodeMCU 1.0 a na ňom je displej Liquid Crystal(0x27, 20, 4) a snímač BMP 180. Doska Wemos D1 R1 má ku sebe zase pripojený DHT snímač.

Zkusil jsem: Zapojil som ich spôsobom: TX-RX, RX-TX, GND-GND. Dokázal som medzi sebou poslať len slovo a nič viac mi nefungovalo.

Chci docílit: Chcem aby doska Wemos D1 R1 odosielala informácie z DHT snímača do ESP-čka a odtiaľ rovno na displej.

Tu priložím môj kód prijímateľa:

#include <Arduino.h>
#include <Wire.h>

#include <BMP180I2C.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDRESS 0x77

//create an BMP180 object using the I2C interface
BMP180I2C bmp180(I2C_ADDRESS);
LiquidCrystal_I2C lcd(0x27, 20, 4);

void setup() {
  // put your setup code here, to run once:
        Serial.begin(9600);

        //wait for serial connection to open (only necessary on some boards)
        while (!Serial);

        Wire.begin();
  lcd.init();
  lcd.backlight();


        //begin() initializes the interface, checks the sensor ID and reads the calibration parameters.
        if (!bmp180.begin())
        {
                Serial.println("begin() failed. check your BMP180 Interface and I2C Address.");
                while (1);
        }

        //reset sensor to default parameters.
        bmp180.resetToDefaults();

        //enable ultra high resolution mode for pressure measurements
        bmp180.setSamplingMode(BMP180MI::MODE_UHR);
}


void loop() {

  // put your main code here, to run repeatedly:

        delay(1000);

        //start a temperature measurement
        if (!bmp180.measureTemperature())
        {
                Serial.println("could not start temperature measurement, is a measurement already running?");
                return;
        }

        //wait for the measurement to finish. proceed as soon as hasValue() returned true.
        do
        {
                delay(100);
        } while (!bmp180.hasValue());

        Serial.print("Temperature: ");
        Serial.print(bmp180.getTemperature());
        Serial.println(" degC");

        //start a pressure measurement. pressure measurements depend on temperature measurement, you should only start a pressure
        //measurement immediately after a temperature measurement.
        if (!bmp180.measurePressure())
        {
                Serial.println("could not start perssure measurement, is a measurement already running?");
                return;
        }

        //wait for the measurement to finish. proceed as soon as hasValue() returned true.
        do
        {
                delay(100);
        } while (!bmp180.hasValue());

        Serial.print("Pressure: ");
        Serial.print(bmp180.getPressure());
        Serial.println(" Pa");



  lcd.setCursor(0, 0);
  lcd.print("Teplota:");
  lcd.setCursor(9, 0);
  lcd.print((bmp180.getTemperature() ));
  lcd.setCursor(16, 0);
  lcd.print("degC");
  lcd.setCursor(0, 1);
  lcd.print("Tlak:");
  lcd.setCursor(6, 1);
  lcd.print((bmp180.getPressure()));
  lcd.setCursor(16, 1);
  lcd.print("Pa");
}

A toto je kod odosielatela:

#include "DHTesp.h"

#ifdef ESP32
#pragma message(THIS EXAMPLE IS FOR ESP8266 ONLY!)
#error Select ESP8266 board.
#endif

DHTesp dht;

void setup()
{
  Serial.begin(9600);
  Serial.println();
  Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)\tHeatIndex (C)\t(F)");
  String thisBoard= ARDUINO_BOARD;
  Serial.println(thisBoard);

  // Autodetect is not working reliable, don't use the following line
  // dht.setup(17);
  // use this instead:
  dht.setup(D13, DHTesp::DHT22); // Connect DHT sensor to GPIO 17
}

void loop()
{
  delay(dht.getMinimumSamplingPeriod());

  float humidity = dht.getHumidity();
  float temperature = dht.getTemperature();

  Serial.print(dht.getStatusString());
  Serial.print("\t");
  Serial.print(humidity, 1);
  Serial.print("\t\t");
  Serial.print(temperature, 1);
  Serial.print("\t\t");
  Serial.print(dht.toFahrenheit(temperature), 1);
  Serial.print("\t\t");
  Serial.print(dht.computeHeatIndex(temperature, humidity, false), 1);
  Serial.print("\t\t");
  Serial.println(dht.computeHeatIndex(dht.toFahrenheit(temperature), humidity, true), 1);
}

Naozaj neviem ako by som to mal urobiť a za každú pomoc dakujem....

  • Peter
 
Odpovědět
18.1.2020 22:55
Avatar
Odpovídá na peter
Ondřej Šrytr:19.1.2020 12:27

Ahoj,

přes komunikaci TX-RX ti tedy jen šly odeslat slova a ne třeba čísla, znaky? Wemos by mohl posílat příkazy do ESP v podobě "TEMP=20". V ESP by sis to v kódu rozebral a mohl pak zobrazit na displeji.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
19.1.2020 12:27
Avatar
peter
Člen
Avatar
Odpovídá na Ondřej Šrytr
peter:19.1.2020 12:32

išlo mi posielať čísla, znaky a slová...
Len moc nechápem ako si to myslel s tým "TEMP=20". V tomto naozaj nemám žiadne skúsenosti a naozaj si s tým neviem dať rady

 
Nahoru Odpovědět
19.1.2020 12:32
Avatar
Odpovídá na peter
Ondřej Šrytr:19.1.2020 12:53

Kdyby ses rozhodl toho odesílat více, tak ať ty data odlišíš. TEMP = temperature (teplota), pokud by ti to dělalo problém, mohl bys odesílat jen samotnou teplotu. Takže bych začal prvně tím, že bych z Wemosu v určitém intervalu odesílal data do ESP. V ESP si pak v loop() připravíš kód, který bude kontrolovat, zda přišla nějaká data.

 
Nahoru Odpovědět
19.1.2020 12:53
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.