• 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 z kodem
#1
Witam, mam oto taki kod:
Kod:
#include <SPI.h>
#include <Ethernet.h>
#include <SoftwareSerial.h>

// assign a MAC address for the ethernet controller.
// fill in your address here:
byte mac[] = {
 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
// fill in an available IP address on your network here,
// for manual configuration:
IPAddress ip(192, 168, 0, 177);

// fill in your Domain Name Server address here:
IPAddress myDns(192, 168, 0, 1);

// initialize the library instance:
EthernetClient client;

//char server[] = "www.arduino.cc";
IPAddress server(192,168,0,102);

unsigned long lastConnectionTime = 0;             // last time you connected to the server, in milliseconds
const unsigned long postingInterval = 10L * 1000L; // delay between updates, in milliseconds
// the "L" is needed to use long type numbers
 SoftwareSerial HC12(53, 54); // HC-12 TX Pin, HC-12 RX Pin
 
void setup() {
 // start serial port:
 Serial.begin(9600);
 HC12.begin(9600);               // Serial port to HC12

 // give the ethernet module time to boot up:
 delay(1000);
 // start the Ethernet connection using a fixed IP address and DNS server:
 Ethernet.begin(mac, ip, myDns);
 // print the Ethernet board/shield's IP address:

}

void loop() {
 // if there's incoming data from the net connection.
 // send it out the serial port.  This is for debugging
 // purposes only:
 if (client.available()) {
   char c = client.read();
   Serial.write(c);
 }

 // if ten seconds have passed since your last connection,
 // then connect again and send data:
 if (millis() - lastConnectionTime > postingInterval) {
   httpRequest();
 }

}

void httpRequest() {

 client.stop();

 // if there's a successful connection:
 if (client.connect(server, 80)) {
   Serial.println("connecting...");
   client.println("GET /index.php?dane=");

while (HC12.available()) {            
    Serial.write(HC12.read());
    client.write(HC12.read());
   }
   
  client.print(" HTTP/1.1");
   client.println("Host: 192.168.0.102");
   client.println("Connection: close");
   client.println();

   lastConnectionTime = millis();
 } else {

   Serial.println("connection failed");
 }
}
Arduino łączy się z PHPem lecz nie chce nadać dandych z HC-12.
Jak powinien być napisany skrypt by dane były wysyłane do PHP
 
Odpowiedź
#2
Uruchom sobie program SocketTest3 na PC, odpal serwer, obserwuj czy Arduino się łączy i co wypisuje.
Wg mnie komunikacja powinna wyglądać tak, że gdy 1 moduł z HC12 ma coś do powiedzenia, nadaje do modułu 2 z HC12 i kartą sieciową, ten to zbiera i najlepiej po zebraniu całego pakietu danych z modułu 1 nadaje tę całość do serwera PHP. To u Ciebie wygląda tak, jak rozmowa z telemarketerem - ktoś do mnie dzwoni, odbieram telefon i słyszę czekaj, będzie rozmowa ( i teraz zaczynasz zbierać myśli z modułu 1, a może on nie ma nic akurat do powiedzenia?). Oczywiście się rozłączam, cenię swój czas nie mniej niż telemarketer, a to on ma biznes, niech sobie czeka.
 
Odpowiedź
#3
(12-06-2018, 22:40)kaczakat napisał(a): Uruchom sobie program SocketTest3 na PC, odpal serwer, obserwuj czy Arduino się łączy i co wypisuje.
Wg mnie komunikacja powinna wyglądać tak, że gdy 1 moduł z HC12 ma coś do powiedzenia, nadaje do modułu 2 z HC12 i kartą sieciową, ten to zbiera i najlepiej po zebraniu całego pakietu danych z modułu 1  nadaje tę całość do serwera PHP. To u Ciebie wygląda tak, jak rozmowa z telemarketerem - ktoś do mnie dzwoni, odbieram telefon i słyszę czekaj, będzie rozmowa ( i teraz zaczynasz zbierać myśli z modułu 1, a może on nie ma nic akurat do powiedzenia?). Oczywiście się rozłączam, cenię swój czas nie mniej niż telemarketer, a to on ma biznes, niech sobie czeka.
Czyli najprostszym rozwiązaniem było by dodać opóźnienie, tak?
 
Odpowiedź
#4
Gdzie ja tam piszę o dodaniu opóźnienia? Na tym forum na pewno jest wiele przykładów komunikacji przez UART (bo sam tu wrzucałem przykład z serialEvent), a do tego sprowadza się wykorzystanie HC12. Uart ma być cały czas w gotowości do odbioru danych. Albo moduł 1 sam ustala, że dane wysyła co np. 5s, albo wysyłasz mu zapytanie z modułu 2 i wtedy odpowiada. Ale nie ma gwarancji, szczególnie przy komunikacji radiowej, że coś odpowie, lub że będzie coś wysyłał co 5s. To po co się łączysz wtedy z serwerem i czekasz na dane z UART? Musisz zmienić podejście. Masz zebrać sobie dane z UART od modułu 1 do wysłania w jakieś zmiennej, jak paczka danych jest gotowa (no przecież chyba wiesz jakich danych oczekujesz, np. ciągu literek i znaku końca linii), to dopiero wtedy inicjujesz podłączenie do serwera z PHP i wrzucasz mu tę paczkę. Jak chcesz wiedzieć, że od np. 5 minut moduł 1 się nie odzywał, to możesz wrzucić wartość np. -1 dla wilgotności, czy jakoś inaczej dać sobie znać, że komunikacja modułu HC12 się zacięła, wilgotność -1 jest na pewno stanem niemożliwym.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości