martinius96 píše: ↑20 bře 2022, 21:30Posielaš to PHP scriptu v takomto formáte?
To je dosť nevhodné, keďže percentá sa používajú pri encodingu špeciálnych znakov, ktoré môže payload nadobúdať, najmä pri texte, diakritike v znakoch a podobne.
Taktiež položku dB so silou prijatého signálu (RSSI) zrejme nemáš správne pomenovanú.
Keďže RSSI je vyjadrené v jednotkách dBm, ktorá nadobúda hodnoty 0 až -110.
0 znamená výborný signál, -110 minimálny, resp. žiadny signál.
Teda -53 dBm neznamená -53% signálu, ale v prepočte to bude cca 51% sila signálu, ak by bol rozsah väčší, videl by si tam vyššiu chybu.
Ak by si to chcel z toho rozsahu vyjadriť v percentách môžeš nato využiť napríklad funkciu map() v Arduino IDE.Kód: Vybrat vše
void setup() { int myRSSI = -35; int val = map(myRSSI, -110, 0, 0, 100); Serial.println(val); }
Kód: Vybrat vše
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <DNSServer.h>
#include <WiFiManager.h> //https://github.com/tzapu/WiFiManager
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
#define TRIGGER_PIN 0 // tlacitko na GPIO0
const int httpPort = 80;
const char* host = "api.thingspeak.com";
const char * hoste = "******************";// Informace pro připojení k thingspeak.com
const char* APIkey = "*************";
const unsigned long SamplingTime = 60000;//3600000; //60000 *3600; // Hodina perioda odesilani [ms]
unsigned long TimeStamp;
float temp;
const char* po=" C,Vcc ";
OneWire oneWire(ONE_WIRE_BUS); // Inicializace DS18B20 na pinu GPIO2
DallasTemperature DS18B20(&oneWire);
//---------------------------------------------------------------------------------
ADC_MODE(ADC_VCC);
void setup() {
Serial.begin(115200); // Otevření komunikace po sériové lince
pinMode(TRIGGER_PIN, INPUT); // tlacitko na GPIO0
WiFi.begin(); // Inicializace připojení k síti
WiFi.mode(WIFI_STA);
WiFi.setAutoReconnect(true);
// deset sekund se pokousi o pripojeni k WiFi
Serial.println("\r\nWaiting for wifi");
for (uint8_t i = 0; (WiFi.status() != WL_CONNECTED) && (i < 10); i++) {
delay(1000);
Serial.print(".");
}
// Potvrzení připojení k síti
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\r\nWiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.println();
}
else {
Serial.println("\r\nWiFi not connected!\r\nPress the GPIO button to start the WifiManager");
}
DS18B20.requestTemperatures(); // Prvni vzorek
temp = DS18B20.getTempCByIndex(0);
TimeStamp = millis();
}
//---------------------------------------------------------------------------------
void loop() {
// je volan WifiManager?
if ( digitalRead(TRIGGER_PIN) == LOW ) {
WiFiManager wifiManager;
wifiManager.startConfigPortal("OnDemandAP");
Serial.println("connected...yeey :)");
}
// Měření a odesílání teploty probíhá v intervalu SamplingTime,
// ale pouze pokud existuje pripojeni k WiFi
if ((millis() > SamplingTime) && ((millis() - SamplingTime) > TimeStamp) && (WiFi.status() == WL_CONNECTED)) {
TimeStamp = millis();
DS18B20.requestTemperatures(); // Získání informace o teplotě teploty
temp = DS18B20.getTempCByIndex(0);
Serial.print("Temperature: ");
Serial.println(temp);
char charVal[12];
// Konverze vyčtené teploty do stringu
// (hodnota, počet míst, počet desetinných míst,
// umístění stringu)
dtostrf(temp, 8, 2, charVal);
Serial.print("connecting to ");
Serial.println(host);
WiFiClient client;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}
// Vytvoření URL pro odeslání informace o teplotě
String url = "/update?key=";
url += APIkey;
url += "&field1=";
url += charVal;
Serial.print("Requesting URL: ");
Serial.println(url);
// Odeslání požadavku na server
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
Serial.println();
while (client.available()) {
String line = client.readStringUntil('\r');
Serial.print(line); // tisk informací přijatých ze serveru
delay(10); }
Serial.println();
Serial.println("connection completed"); // potvrzení ukončení odesílání
Serial.println();
Serial.println();
Serial.println(WiFi.RSSI());
float getVcc = ESP.getVcc()/1000.00;
//*************************************
if (client.connect(hoste, 80)) {
dtostrf(temp, 4,2, charVal); //úprava 4.1.2021
String username = charVal;
//username += po;
username += getVcc;
username += WiFi.RSSI();
Serial.println(username);
Serial.println(getVcc);
String urli = "/som*********.php?use***********=" + u***********;
//**
Serial.println(urli);
// uprava 10.1.2021
client.print(String("GET ") + urli + " HTTP/1.0\r\n" + "Host: " + hoste + "\r\n" + "Connection: close\r\n\r\n");
delay(1000);
while (client.connected()) {
String line = client.readStringUntil('\n');
Serial.println(line); //VYPIS HTTP HLAVICKY
if (line == "\r") {
break;
}
//***********************************
Serial.println();
Serial.println("posilani na druhe misto"); // potvrzení ukončení odesílání
Serial.println();
Serial.println();
}
}}}
Přemýšlím jestli neupravit ten projekt který posílá obrázky aby posílal i druhou hodnotu sílu signálu WiFi aby jsem věděl jestli není ten problém z kolísáním síly WiFi díky
Toto píši ve chvatu tak mi promiňte takový písemný projev