Problem z komunikacja miedzy Arduino a serwerem w NodeJS

Odpowiedz Nowy wątek
2018-12-18 07:23
PoczątkującyProgramista
0

Witam wszystkich,
Jestem nowy na forum. Mam problem z komunikacja miedzy arduino a serwerem w nodejs. Przekopałem dosłownie cały internet i nic. Sytyuacja ma się następująco: Podłączam serwer nodejs komendą node server.js i odpala się serwer. Potem wgrywam kod na płytkę- pokazuje się komunikat, 'connected'. I w tym momencie nic dalej mi nie działa. Tzn nie wiem jak przesłać informację z serwera do Arduino. Jak zamknę połączenie z serwerem to pokaze sie w monitorze portu szeregowego 'disconnected'. Poniżej moje kody. Co robię nie tak?

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = {  
   0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED 
};

// Arduino's IP address, dependent on your network configuration
IPAddress ip(192,168,xxx,xxx);

// Node.js Server IP Address
IPAddress server(192,168,xxx,xxx);

// Create the Ethernet client
EthernetClient client;

void setup() {
  // start the Ethernet connection:
  Ethernet.begin(mac, ip);
  // start the serial library:
  Serial.begin(9600);
  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("connecting...");

  if (client.connect(server, 3000)) {
    Serial.println("connected");
  } 
  else {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
    delay(1000);
    setup();
  }
}

void loop()
{
  // if you are connected and data is available
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for(;;)
      ;
  }
}
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const server = require('http').createServer(app);
const io = require('socket.io').listen(server);
var cors = require('cors');
const PORT = 3000;

app.use(cors({credentials: true, origin: '*'}));

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

server.listen(PORT, function () {
    console.log('Server is running on Port: ' + PORT);
});

io.sockets.on('connection', function(socket) {
    console.log('A new user connected');
    socket.emit('info', {msg: 'The world is round.' });
});
edytowany 1x, ostatnio: furious programming, 2018-12-18 14:30

Pozostało 580 znaków

2018-12-18 10:19
0

Nie bardzo rozumiem, czego się spodziewałeś - nigdzie nie widzę jakiegokolwiek przesyłania danych.
Najpierw łączysz się z serwerem i wyświetlasz status:

  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

a potem sprawdzasz czy jesteś rozłączony:

if (!client.connected()) {

i jeśli tak, to rzucasz komunikat i wchodzisz w pustą pętlę.
To ma sens, owszem, ale co jeśli jesteś połączony?
W przypadku połączenia, nie robisz nic. Ponownie wykonujesz cały kod zawarty w pętli loop().

Zawsze pisząc kod myśl o przypadkach alternatywnych. Zawsze istnieje jakieś else:

if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for(;;)
      ;
}
else {
    while(client.connected()) {
        // Sending data, performing the communication
    }
    Serial.println("server disconnected - end of communication");
}
1:nigdzie nie widzę jakiegokolwiek przesyłania danych. - socket.emit('info', {msg: 'The world is round.' });. 2:W przypadku połączenia, nie robisz nic. Ponownie wykonujesz cały kod zawarty w pętli loop() - tak jak sam zauważyłeś: w przypadku gdy jest połączenie, w pętli nieustannie jest sprawdzane if (client.available()), czyli w zasadzie Twój kod niewiele różni się od oryginału. - Patryk27 2018-12-18 10:30
@Patryk27: Ach, rzeczywiście. Za bardzo skupiłem się na nadawaniu z Arduino. Moje niedopatrzenie :( - Bartosz36 2018-12-18 10:48

Pozostało 580 znaków

2018-12-18 10:49
PoczątkującyProgramista
0

Jak w tym przypadku odczytać nową wartość? Powiedzmy, że chcę zmienić jakąś wartość- przesłać ją z serwera do wszystkich połączonych urządzeń. Działa mi to w angularze ale tu mam duży problem z tym. Nie wiem jak ustawić nasłuchiwanie na zmiany po stronie arduino.

Moje założenie jest takie, że serwer steruje wszystkim. Czyli arduino musi nasłuchiwać na zmiany. Ale tu mam problem

edytowany 1x, ostatnio: furious programming, 2018-12-18 14:31

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0