Всем доброго времени суток. В этой теме поделюсь опытом, который требует поправок
Хотел сделать, что то на подобии управление светодиодной лентой голосом и это получилось сделать с помощью Homebridge и айфона, сири распознает голос и отправляет запрос на сервер, а тот же отправляет его на esp. Все хорошо работает, но ответ от esp сервер не получает, по непонятной мне причине.
Код для esp
конфиг для homebridge
Как я уже и говорил ранее, запросы уходят, лента регулируется, но нет ответа от esp. Кто знает как это можно решить?
Хотел сделать, что то на подобии управление светодиодной лентой голосом и это получилось сделать с помощью Homebridge и айфона, сири распознает голос и отправляет запрос на сервер, а тот же отправляет его на esp. Все хорошо работает, но ответ от esp сервер не получает, по непонятной мне причине.
Код для esp
Код:
#include <ESP8266WiFi.h>
#define max(a,b) ((a)>(b)?(a):(b))
#define redPin 0 //GPIO_0 - Red channel
#define grnPin 2 //GPIO_2 - Green channel
#define bluPin 3 //GPIO_3/RXD - Blue channel
WiFiServer server(80); //Set server port
String readString; //String to hold incoming request
String hexString = "000000"; //Define inititial color here (hex value)
int state;
int r;
int g;
int b;
float R;
float G;
float B;
int x;
int V;
///// WiFi SETTINGS - Replace with your values /////////////////
const char* ssid = "admin";
const char* password = "1010101010";
IPAddress ip(10,1,1,198); // set a fixed IP
IPAddress gateway(10,1,1,1); // Your router IP
IPAddress subnet(255,255,255,0); // Subnet mask
////////////////////////////////////////////////////////////////////
void WiFiStart() {
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
WiFi.config(ip, gateway, subnet);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print("_");
}
Serial.println();
Serial.println("Done");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
Serial.println("");
server.begin();
}
void allOff() {
state = 0;
analogWrite(redPin, 0);
analogWrite(grnPin, 0);
analogWrite(bluPin, 0);
}
//Write requested hex-color to the pins (10bit pwm)
void setHex() {
state = 1;
long number = (long) strtol( &hexString[0], NULL, 16);
r = number >> 16;
g = number >> 8 & 0xFF;
b = number & 0xFF;
r = map(r, 0, 255, 0, 1023); //added for 10bit pwm
g = map(g, 0, 255, 0, 1023); //added for 10bit pwm
b = map(b, 0, 255, 0, 1023); //added for 10bit pwm
analogWrite(redPin, (r));
analogWrite(grnPin, (g));
analogWrite(bluPin, (b));
}
//Compute current brightness value
void getV() {
R = roundf(r/10.23); //for 10bit pwm, was (r/2.55);
G = roundf(g/10.23); //for 10bit pwm, was (g/2.55);
B = roundf(b/10.23); //for 10bit pwm, was (b/2.55);
x = max(R,G);
V = max(x, B);
}
//For serial debugging only
void showValues() {
Serial.print("Status on/off: ");
Serial.println(state);
Serial.print("RGB color: ");
Serial.print(r);
Serial.print(".");
Serial.print(g);
Serial.print(".");
Serial.println(b);
Serial.print("Hex color: ");
Serial.println(hexString);
getV();
Serial.print("Brightness: ");
Serial.println(V);
Serial.println("");
}
void setup(){
Serial.begin(115200);
setHex(); //Set initial color after booting. Value defined above
WiFi.mode(WIFI_STA);
WiFiStart();
//showValues(); //Uncomment for serial output
}
void loop() {
//Reconnect on lost WiFi connection
if (WiFi.status() != WL_CONNECTED) {
WiFiStart();
}
WiFiClient client = server.available();
if (!client) {
return;
}
while(client.connected() && !client.available()) {
delay(1);
}
//Respond on certain Homebridge HTTP requests
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (readString.length() < 100) {
readString += c;
}
if (c == '\n') {
Serial.print("Request: "); //Uncomment for serial output
Serial.println(readString); //Uncomment for serial output
//Send reponse
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
//On
if(readString.indexOf("on") >0) {
setHex();
showValues();
}
//Off
if(readString.indexOf("off") >0) {
allOff();
showValues();
}
//Set color
if(readString.indexOf("set") >0) {
hexString = "";
hexString = (readString.substring(9,15));
setHex();
showValues();
}
//Status on/off
if(readString.indexOf("status") >0) {
client.println(state);
}
//Status color (hex)
if(readString.indexOf("color") >0) {
client.println(hexString);
}
//Status brightness (%)
if(readString.indexOf("bright") >0) {
getV();
client.println(V);
}
delay(1);
client.stop();
readString="";
}
}
}
}
}
Код:
{
"bridge": {
"name": "NavigatoR",
"username": "CC:22:3D:E3:CE:30",
"port": 51826,
"pin": "031-45-154"
},
"description": "Example configuration file for NodeMCU-RGB-Controller and better-http-rgb plugin",
"accessories": [{
"accessory": "HTTP-RGB",
"name": "RGB Strip",
"switch": {
"status": "http://192.168.1.10:80/status",
"powerOn": "http://192.168.1.10:80/on",
"powerOff": "http://192.168.1.10:80/off"
},
"color": {
"status": "http://192.168.1.10:80/color",
"url": "http://192.168.1.10:80/set/%s"
},
"brightness": {
"status": "http://192.168.1.10:80/bright",
"url": "http://192.168.1.10:80/set/%s"
}
}],
"platforms": []
}
Как я уже и говорил ранее, запросы уходят, лента регулируется, но нет ответа от esp. Кто знает как это можно решить?