Arduino: Komunikácia medzi doskami

Odpovědět
Peter Kolok
Příspěvky: 5
Registrován: 18 led 2020, 23:11
Reputation: 0

Arduino: Komunikácia medzi doskami

Příspěvek od Peter Kolok » 18 led 2020, 23:17

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č.

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

Chcem docieliť: 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:

Kód: Vybrat vše

#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:

Kód: Vybrat vše

#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....
Přílohy
83079746_2689720987784979_8938893022578343936_n.jpg
82846329_107888643975922_6695018368447021056_n.jpg
82586862_547631265963491_723563291997110272_n.jpg
82452193_525879221612222_3385243405381533696_n.jpg

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: Arduino: Komunikácia medzi doskami

Příspěvek od jankop » 19 led 2020, 10:07

Já mám obecně problém řešit úlohy, které nedávají smysl. Máš dvě více méně shodná zařízení NODEMCU a WEMOS. Proč nezapojíš displej, BMP180 a DHT k jednomu nebo druhému? Ušetříš jeden modul a všechno zásadně zjednodušíš.
Jinak při zběžném pohledu jsem ze strany přijímače nenašel ani náznak pokusu o přijetí něčeho ze sériové linky. Je vcelku jasné, žes něco posbíral na webu a vložil do toho touhu, aby to fungovalo tak, jak si ty představuješ, ale to je málo.
Brání ti zadání úlohy to udělat všechno na jednom, na tom WEMOS ?

Peter Kolok
Příspěvky: 5
Registrován: 18 led 2020, 23:11
Reputation: 0

Re: Arduino: Komunikácia medzi doskami

Příspěvek od Peter Kolok » 19 led 2020, 12:46

CIeľom mojej ročníkovej práce je urobiť to, aby tieto dosky medzi sebou komunikovali. Samozrejme že sa dajú tieto snímače napojiť na jedno zariadenie. Len bohužiaľ toto na moju prácu nestačí a musia tam byť prvky komunikácie.

Na koľko, ale neviem docieliť komunikáciu medzi posielaním hodnôt z jednej dosky do druhej, tak mi to rapídne sťažuje prácu.

Mám tu však odskúšané programy pre odosielateľa:

Kód: Vybrat vše

#include "DHTesp.h"

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

DHTesp dht;
int Teplota[] = dht.getTemperature(); //String data

void setup() {
  // Begin the Serial at 9600 Baud
  Serial.begin(9600);
}

void loop() {
  Serial.write(Teplota); //Write the serial data
  delay(1000);
}
a prijímateľ

Kód: Vybrat vše

char Teplota[10]; //Initialized variable to store recieved data

void setup() {
  // Begin the Serial at 9600 Baud
  Serial.begin(9600);
}

void loop() {
  Serial.readBytes(mystr,5); //Read the serial data and store in var
  Serial.println(mystr); //Print data on Serial Monitor
  delay(1000);
}
Sú to síce len slová, ale aj tak nechápem tej teorií...

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Arduino: Komunikácia medzi doskami

Příspěvek od ondraN » 19 led 2020, 14:48

Obecně, si vždy musíš hlídat, jestli ti už druhé zařízení něco poslalo, teprve potom to vzít a pracovat s tím. Na to slouží metoda available(). Zkus se podívat na arduino reference na Serial.available()
https://www.arduino.cc/reference/en/lan ... on/serial/
mimochoden, v příkladech najdeš i ukázku jak udělat komunikaci mezi dvěma arduiny. A pokud na druhém konci není arduino, ale něco se sériovým portem, je to úplně stejné. Zkus si to projít a pochopit, to ti dá víc, než tady mámit hotový kód.

Le-Ze
Příspěvky: 201
Registrován: 24 črc 2017, 08:15
Reputation: 0

Re: Arduino: Komunikácia medzi doskami

Příspěvek od Le-Ze » 20 led 2020, 10:57

Kód: Vybrat vše

char inString[32];
int inCount;

void loop()
{
    inCount = 0;

    while (Serial.available() > 0)
    {
        inString[inCount] = Serial.read();
        delay(10);
        if (inString[inCount] == '\0') break;
        inCount++;
    }

    inString[inCount] = '\0';

    if (inCount > 0) {

        String MyString = inString;
        MyString.trim();
//-------------------------------------------------------------------------------------------
// a pak třeba
    if (MyString == "A001_rele0")  
    {
    }
   }

Peter Kolok
Příspěvky: 5
Registrován: 18 led 2020, 23:11
Reputation: 0

Re: Arduino: Komunikácia medzi doskami

Příspěvek od Peter Kolok » 27 led 2020, 20:07

Ďakujem veľmi pekne! :-)

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Google [Bot] a 11 hostů