09-03-2019, 00:09
To jest cały kod testowy
Kod:
#include "Nextion.h"
#include "DHTesp.h"
#include <Wire.h>
#include <WiFi.h>
#include <WiFiUdp.h>
#define LED 2
#define ANALOG_PIN_0 36 // pomiar napiecia kanał ADC1_CH0
DHTesp dht;
const byte numChars = 32; //
char receivedChars[numChars]; // zmienne odczytu Serial2 do UDP
boolean newData = false; //
const char *ssid = "Audi"; //
const char *pwd = "puchatek1978"; // ustawienie sieci Wifi
const char * udpAddress = "192.168.4.1"; // adres serwera
const int udpPort = 2000; // port UDP
int strona_AC = 0;
boolean AC_data_send = false;
WiFiUDP udp;
// Declare your Nextion objects - Example (page id = 0, component id = 1, component name = "b0")
NexPage page9 = NexPage(9, 0, "page9");
NexPage page11 = NexPage(11, 0, "page11");
NexWaveform s0 = NexWaveform(9, 3, "s0");
NexText t20 = NexText(9, 4, "t20");
NexText tTempC = NexText(11, 3, "tTempC");
NexText tHumidity = NexText(11, 4, "tHumidity");
NexTouch *nex_listen_list[] = {
&page9,
&page11,
NULL
};
void page11PopCallback(void *ptr){
float h = dht.getHumidity();
float t = dht.getTemperature();
if (isnan(h) || isnan(t)) {
return;
}
static char temperatureCTemp[6];
dtostrf(t, 4, 1, temperatureCTemp);
tTempC.setText(temperatureCTemp);
static char hTemp[6];
dtostrf(h, 4, 0, hTemp);
tHumidity.setText(hTemp);
}
void page9PopCallback(void *ptr){
uint8_t adc1 = 0;
float adcV = analogRead(ANALOG_PIN_0);
adc1 = adcV/15.5; // 15.5 zeby 1V falował 0-80 jednostek
s0.addValue(0, 40+adc1); // osfet 40 falowanie 500mV srodek
static char adc2[7];
dtostrf(adcV*0.8058, 5, 0, adc2); // jedna jednostka to 0.8058V
t20.setText(adc2);
}
void setup(void) {
dht.setup(14, DHTesp::DHT11); // Connect DHT sensor to GPIO 14
Serial.begin(512000);
Serial2.begin(512000);
pinMode(LED,OUTPUT);
WiFi.begin(ssid, pwd);
udp.begin(udpPort);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
digitalWrite(LED,HIGH);
delay(500);
digitalWrite(LED,LOW);
}
digitalWrite(LED,HIGH);
page9.attachPop(page9PopCallback);
page11.attachPop(page11PopCallback);
}
void loop (){
nexLoop(nex_listen_list); // loop wyswietlacza Nextion
recvWithEndMarker(); // loop odczytu z Serial2
showNewData(); // loop zapisu serial2 do UDP
showUdpData(); // loop odczytu udp i zapisu do Serial2
AC_data();
}
void recvWithEndMarker() {
static byte ndx = 0; //
char endMarker = '\xFF'; // zmienne do odczytu Serial2
char rc; // endMarker to znak konca danych
while (Serial2.available() > 0 && newData == false) // sprawdzenie czy sa dane do odczytu
{ // i statusu bufora wolny czy zajety
rc = Serial2.read(); // odczytanie danych z Serial2 do bufora
if (rc != endMarker) { // sprawdzenie czy dane maja zakonczenie FF
receivedChars[ndx] = rc;
ndx++;
if (ndx >= numChars) {
ndx = numChars - 1;
}
}
else {
if (ndx > 3)
{
receivedChars[ndx] = '\xFF'; // zapisanie konca danych FF
ndx = 0;
newData = true;
}
else {
memset(receivedChars, 0, sizeof(receivedChars)); // czyczenie dwóch FF FF
} // Nextion wysyła FF FF FF
} // Pierwszy uzyty dwa pozostale
} // generuja puste UDP ze znakiem FF
}
void showNewData() {
if (newData == true) { // stats odczytu z Serial2
udp.beginPacket(udpAddress, udpPort); // przygotowanie do wysylki UDP
udp.print(receivedChars); // zapisanie przychodzace dane Serial2 do UDP
udp.endPacket(); // zakonczeneie danych UDP i wyslaniu
memset(receivedChars, 0, sizeof(receivedChars)); // czyszczenie bufora odczytu UDP
newData = false; // zmiana statusu odczutu
}
}
void showUdpData() {
char uBuffer[7]; //
char data_AC_uBuffer[7];
char data_AC_Buffer[4];
int i_; // zmienne odczytu UDP
int rc_; //
char startMarker_Nextion = 0x65;
char startMarker_AC = 0x41;
char endMarker_AC = '\n';
if (udp.parsePacket()>0) // sprawdzanie czy pszyszły pakiety UDP
{
rc_ = udp.peek(); // podejrzanie pierwszego bajtu
if (startMarker_Nextion == rc_){ // sprawdzenie czy pierwszy bajt to 0x65 dla Nextion
rc_ = udp.read();
if (udp.available() >= 6) // sprawdzenie długosci ciagu znakow w UDP
{ // dla komendy dotyku Nextion callback
uBuffer[0] = rc_;
for (i_ = 1; i_ < 7; i_ ++){ // rozbijanie ciagu znaków na bufory
uBuffer[i_] = udp.read();
}
if (0xFF == uBuffer[4] && 0xFF == uBuffer[5] && 0xFF == uBuffer[6])
{
Serial2.write(uBuffer[0]); //
Serial2.write(uBuffer[1]); //
Serial2.write(uBuffer[2]); //
Serial2.write(uBuffer[3]); // zapis buforow odczytu UDP do Serial2
Serial2.write(uBuffer[4]); //
Serial2.write(uBuffer[5]); //
Serial2.write(uBuffer[6]); //
}else{
uBuffer[i_] = 0x00; // czyszczenie bufora jak nieprawidlowe dane
}
}
}else {
if (startMarker_AC == rc_){ // sprawdzanie czy pierwszy bajt to 0x41 dla AC
rc_ = udp.read();
if (udp.available() >= 6){
data_AC_uBuffer[0] = rc_;
for (i_ = 1; i_ < 7; i_ ++){ // rozbijanie ciagu znaków na bufory
data_AC_uBuffer[i_] = udp.read();
}
if (endMarker_AC == data_AC_uBuffer[6]){
data_AC_Buffer[0]= data_AC_uBuffer[2];
data_AC_Buffer[1]= data_AC_uBuffer[3];
data_AC_Buffer[2]= data_AC_uBuffer[4];
data_AC_Buffer[3]= data_AC_uBuffer[5];
String dane_UDP_data_AC = String (data_AC_Buffer);
strona_AC = dane_UDP_data_AC.toInt();
AC_data_send = true;
}else{
data_AC_uBuffer[i_] = 0x00;
}
}
}
}
}
}
void AC_data() {
char startMarker_AC = 0x41;
char drugiMarker_AC = 0x43;
char endMarker_AC = '\n';
int send_AC = -234;
// if (AC_data_send == true){
if (strona_AC == 5) {
// if(AC_data_send == true){
udp.beginPacket(udpAddress, udpPort); // przygotowanie do wysylki UDP
udp.write(startMarker_AC);
udp.write(drugiMarker_AC);
udp.print(send_AC);
udp.write(endMarker_AC);
udp.endPacket();
AC_data_send = false;
}
// }
}
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą.