• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Problem przy komunikowaniu Arduino z NodeMCU
#1
Witam, mógłby mi ktoś pomóc i podpowiedzieć dla czego zamiast liczb które wychodzą z NodeMCU i Blynk'a(zeRGBa), w Arduino otrzymuję nie mające związku liczby? Korzystam z serial comunication między Arduino i NodeMCU. Przy sprawdzeniu monitora portu na Node wszytko idzie ładnie, natomiast monitor portu przy Arduino pokazuje zupełnie inne wyniki. Dodam że wszytko ładnie chodzi przy przyciskach/suwakach w Blynk'u, jedynie ten problem pojawia się przy korzystaniu z zeRBGy. Szukałem w Google ale nie znalazłem odpowiedzi która by zadziała. Reasumując z Blynka wysyłane są 3 wartości np: 600, 750, 1010, NodeMCU ładnie je odbiera i wyświetla natomiast arduino zwraca np: 38, 157, 230. 
KOD Z NODEMCU:
Kod:
#define BLYNK_PRINT Serial
#include<SoftwareSerial.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

SoftwareSerial s(3,1);

char auth[] = "wHpLrm_YSfZsDSNzXY3RaWJC-ii0TvLI";
char ssid[] = "TP-LINK_10AC";
char pass[] = "10456217";

void setup()
{
   Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
}
BLYNK_CONNECTED()
{
  Blynk.syncVirtual(V4);//ledy
  Blynk.syncVirtual(V6);//czerwone led
}
BLYNK_WRITE(V4)
{
  int buttonState=param.asInt();
    if (buttonState == 1)
{
     Serial.write(9);
}
  else if (buttonState == 0)
  {
     Serial.write(10);
  }
}
BLYNK_WRITE(V6)
{ int buttonState=param.asInt();
Serial.write(buttonState);
}
void loop() { 
    Blynk.run();
}


KOD Z UNO:
Kod:
int data;
#include<SoftwareSerial.h>
void setup()
{
Serial.begin(9600);
}
void loop()
{
data = Serial.read();
delay(1000);
Serial.println("data:");Serial.println(data);
}


Załączone pliki Miniatury
           
 
Odpowiedź
#2
Mieszasz write i print.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
(05-03-2020, 05:57)kaczakat napisał(a): Mieszasz write i print.
Zmieniłem to jednak dalej nie działa, co mogłoby oprócz tego powodować taki problem?
 
Odpowiedź
#4
Z print jest łatwiej, używasz wysyłania linii napisów i funkcji najlepiej z przykładu serialEvent albo chociaż Serial.readStringUngil() do odczytania całej linii. Poza tym nie wstawia się delay, bo do odebrania danych trzeba być gotowym zawsze. Jak używasz write to jest to komunikacja bardziej skomplikowana, bo sam musisz decydować co takiego odebrałeś, ile tego masz odebrać, ułożyć sobie ramkę danych, podejrzewam że niby wysyłasz pojedyncze bajty, a wartości masz >255, więc łączy ci kilka. Jak to jest byte to użyj Serial.readByte(), jak coś innego to lepiej zacznij od uzupełnienia wiedzy o komunikacji szeregowej, bo o tym u znajomego widziałem taką książkę z 8cm grubą. Można też użyć struktury i odczytywać cały zestaw danych.
Do tego jak to sobie tu poukładałeś, pokaż końcowy kod. Czy Ty używasz tego samego serial do odbierania danych z ESP i potem nim drukujesz na komputer?
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości