да, теперь настраивайте виджеты под себя, смотря что вам нужноТак и должно быть??
да, теперь настраивайте виджеты под себя, смотря что вам нужноТак и должно быть??
Виктор, в том то и дело, что я не знаю, как это делать... Где почитать??да, теперь настраивайте виджеты под себя, смотря что вам нужн
В приложении есть пункт меню: Виджеты, там полное описание последних виджетов, но не всех и на английском но я работаю над описанием и надеюсь, что скоро описание будет для всех виджетов и на русском тоже.Виктор, в том то и дело, что я не знаю, как это делать... Где почитать??
Скорее всего, у вас просто совпали глюки на сервере и обновление IoT Manager. У меня все работает и в 1.4.7. Зайдите в консоль и перегрузите брокер.После обновления на ver 1.4.7 перестал подключаться к брокеру.
к сожалению, откат невозможен (это особенность GooglePlay)После обновления на ver 1.4.7 перестал подключаться к брокеру. Как откатить обновление?
ets Jan 8 2013,rst cause:2, boot mode:(3,7)
load 0x4010f000, len 1264, room 16
tail 0
chksum 0x42
csum 0x42
~ld
MQTT client started.
Free heap = 31216
Connecting via WiFi to MyFi...
Soft WDT reset
ctx: cont
sp: 3fff1e60 end: 3fff22c0 offset: 01b0
>>>stack>>>
3fff2010: 0000001e 4000420c 60000200 3fff00c4
3fff2020: 00000100 40004ac0 00000100 003fd000
3fff2030: 00000100 3fff0004 3fffc718 003fd000
3fff2040: 00000378 4000410f 40101528 00000378
3fff2050: 3fff0004 000003fd 3fff0004 3fff4b08
3fff2060: 3fffc718 3fff0004 00000378 00000000
3fff2070: 003fd000 40211efb 00000378 3fff4b08
3fff2080: 00001000 40211f85 3fff0004 000003ff
3fff2090: 000003fd 00000000 003fd000 3fff0004
3fff20a0: ffffff00 ffffffff ffffffff ffffffff
3fff20b0: ffffffff ffffffff ffffffff 000003ff
3fff20c0: 40211e24 00000003 3fff0fe4 3ffe96ac
3fff20d0: 00000001 40211e52 00000003 3ffe96ac
3fff20e0: 40203e08 00000000 00000000 00000000
3fff20f0: 00000000 3ffe96a0 3fff0fe4 40203ed5
3fff2100: 00000000 00000000 00000000 00000000
3fff2110: 00000000 00000000 00000000 00000000
3fff2120: 00000000 00000000 00000000 00000000
3fff2130: 00000000 00000000 00000000 00000000
3fff2140: 00000000 00000000 00000000 00000000
3fff2150: 00000000 00000000 00000000 00000000
3fff2160: 00000000 00000000 00000000 00000000
3fff2170: 3fff37f0 40106da6 3fff222c 00000001
3fff2180: 00000000 00000000 00000000 402079f6
3fff2190: 3fff11c8 00000001 3ffe9b55 40207400
3fff21a0: 3fff11c8 00000002 3ffe9562 3fff128c
3fff21b0: 3ffe8344 00000003 3fff11c8 40206949
3fff21c0: 3ffe9b54 3fff0fe4 3fff11c8 40206949
3fff21d0: 00000000 00000001 3fff11c8 402074d4
3fff21e0: 00000000 40203e58 3fff11c8 3fff128c
3fff21f0: 3ffe8344 3fff0fe4 3fff11c8 40203631
3fff2200: 3fff2220 00000001 3fff222a 40207601
3fff2210: 3fff35e0 0000000e 3fff2290 40207a4e
3fff2220: 3fff11c8 00000001 3ffe9b55 40207400
3fff2230: 3fff1100 0000000b 3ffe930f 3fff128c
3fff2240: 3fffdc20 00000005 3fff11c8 40206949
3fff2250: 3ffe9b54 3fff0b08 3fff11c8 3fff128c
3fff2260: 3fffdc20 3fff0b08 3fff11c8 402074d4
3fff2270: 40206238 0000000a 3fff11c8 40207749
3fff2280: 3fffdc20 3fff0b08 3fff11c8 40202f91
3fff2290: 3fff3840 0000000f 00000000 3fff128c
3fff22a0: 3fffdc20 00000000 3fff1285 40206ae5
3fff22b0: 00000000 00000000 3fff12a0 40100114
<<<stack<<<
ets Jan 8 2013,rst cause:2, boot mode:(3,7)
load 0x4010f000, len 1264, room 16
tail 0
chksum 0x42
csum 0x42
~ld
MQTT client started.
Free heap = 31216
Connecting via WiFi to MyFi...
С
нужно не только по напряжению требования соблюсти, но и по току.На форуме нашел что к питанию есп капризна.
Просто отправляйте заранее отформатированную строку, например "123.456" (поддерживаются только цифры, пробел и точка)1. как в виджет "display-value" выводить дробное число?
пока нет, но будет, через d32. есть ли возможность выводить график (если нет, то планируется ли)?
формат "float"?Просто отправляйте заранее отформатированную строку, например "123.456"
Нет, именно как строку. Выводятся просто символу по-порядку, что пошлете - то и будет.Спасибо за очень быстрый ответ!
формат "float"?
if (digitalRead(knopka1)==0){
if (sub.payload_string() == "0") {
newValue = 1; // no inverted
stat[0] = stat0;
} else {
newValue = 0;
stat[0] = stat1;
}
digitalWrite(pin[0],newValue);
pubStatus(sTopic[0], stat[0]);
}
посмотрите еще третий пример - там используется ArduinoJSON и вроде более понятнейВ данный момент делаю все на основе Вашего первого примера.
1. не спрашивайте у брокера - он не знает, сохраняйте предыдущее состояние в переменной1. у брокера спросить текущее состояние светодиода;
2. изменить состояние на противоположное;
3. оповестит брокера о новом состоянии.
А я так не заспамлю брокера? Наверное проще сохранять старое состояние в переменной.в принципе можно и не сохранять старое состояние, а отправлять на брокер, скажем каждую секунду
да, конечноА я так не заспамлю брокера? Наверное проще сохранять старое состояние в переменной.
то, что касается логики, то делайте все как обычно, просто не забывайте отсылать status, чтобы мобильное приложение знало, что у вас изменилосьНужно управлять светодиодом как из приложения, так и с помощью кнопки (кнопка не фиксируемая). На данный момент, получилось только управлять из приложения.
не, не стоит на это рассчитыватьвозможно ли считать состояние пина который сконфигурирован как выход?
Добрый день. Написал скетч и даже попытался его выложить на github правда не знаю на сколько у меня это получилось, т.к. делаю я это в первый раз...Огромная просьба ко всем, кто написал какой-либо скетч, работающий с IoT Manager...
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>
Adafruit_BMP085 bmp;
String davlen;
String temp;
const char *ssid = "****"; // cannot be longer than 32 characters!
const char *pass = "*****"; // WiFi password
String prefix = "/IoTmanager"; // global prefix for all topics - must be some as mobile device
String deviceID = "dev04"; // thing ID - unique device id in our project
WiFiClient wclient;
// config for cloud mqtt broker by DNS hostname ( for example, cloudmqtt.com use: m20.cloudmqtt.com - EU, m11.cloudmqtt.com - USA )
String mqttServerName = "m20.cloudmqtt.com"; // for cloud broker - by hostname, from CloudMQTT account data
int mqttport = 11536; // default 1883, but CloudMQTT.com use other, for example: 13191, 23191 (SSL), 33191 (WebSockets) - use from CloudMQTT account data
String mqttuser = "*****"; // from CloudMQTT account data
String mqttpass = "*****"; // from CloudMQTT account data
PubSubClient client(wclient, mqttServerName, mqttport); // for cloud broker - by hostname
// config for local mqtt broker by IP address
//IPAddress server(192, 168, 1, 100); // for local broker - by address
//int mqttport = 1883; // default 1883
//String mqttuser = "test"; // from broker config
//String mqttpass = "test"; // from broker config
//PubSubClient client(wclient, server, mqttport); // for local broker - by address
String val;
String ids = "";
int newValue, newtime, oldtime, freeheap;
const int nWidgets = 2;
String sTopic [nWidgets];
String stat [nWidgets];
int pin [nWidgets];
String thing_config[nWidgets];
StaticJsonBuffer<1024> jsonBuffer;
JsonObject& json_status = jsonBuffer.createObject();
String string_status;
void FreeHEAP() {
if ( ESP.getFreeHeap() < freeheap ) {
if ( ( freeheap != 100000) ) {
Serial.print("Memory leak detected! old free heap = ");
Serial.print(freeheap);
Serial.print(", new value = ");
Serial.println(ESP.getFreeHeap());
}
freeheap = ESP.getFreeHeap();
}
}
String setStatus ( String s ) {
json_status["status"] = s;
string_status = "";
json_status.printTo(string_status);
return string_status;
}
String setStatus ( int s ) {
json_status["status"] = s;
string_status = "";
json_status.printTo(string_status);
return string_status;
}
void initVar() {
sTopic[0] = prefix + "/" + deviceID + "/BMP180_temp";
stat [0] = setStatus (0);
sTopic[1] = prefix + "/" + deviceID + "/BMP180_davlen";
stat [1] = setStatus (1);
JsonObject& root = jsonBuffer.createObject();
JsonObject& cfg = jsonBuffer.createObject();
root["id"] = 0;
root["page"] = "BMP180";
root["widget"] = "display-value";
root["class1"] = "item no-border"; // class for 1st div
root["style1"] = ""; // style for 1st div
root["descr"] = "Температура"; // text for description
root["class2"] = "balanced"; // class for description from Widgets Guide - Color classes
root["style2"] = "font-size:20px;float:left;padding-top:10px;font-weight:bold;"; // style for description
root["topic"] = sTopic[0];
root["class3"] = ""; // class for 3 div - SVG
root["style3"] = "float:right;"; // style for 3 div - SVG
root["height"] = "40"; // SVG height without "px"
root["color"] = "#52FF00"; // color for active segments
root["inactive_color"] = "#414141"; // color for inactive segments
root["digits_count"] = 6; // how many digits
root.printTo(thing_config[0]);
/////
root["id"] = 1;
root["page"] = "BMP180";
root["widget"] = "display-value";
root["class1"] = "item no-border"; // class for 1st div
root["style1"] = ""; // style for 1st div
root["descr"] = "Давление (мм.рт.ст)"; // text for description
root["class2"] = "balanced"; // class for description from Widgets Guide - Color classes
root["style2"] = "font-size:20px;float:left;padding-top:10px;font-weight:bold;"; // style for description
root["topic"] = sTopic[1];
root["class3"] = ""; // class for 3 div - SVG
root["style3"] = "float:right;"; // style for 3 div - SVG
root["height"] = "40"; // SVG height without "px"
root["color"] = "#52FF00"; // color for active segments
root["inactive_color"] = "#414141"; // color for inactive segments
root["digits_count"] = 3; // how many digits
root.printTo(thing_config[1]);
//////////////////////////////////////
}
void pubStatus(String t, String payload) {
if (client.publish(t + "/status", payload)) {
Serial.println("Publish new status for " + t + ", value: " + payload);
} else {
Serial.println("Publish new status for " + t + " FAIL!");
}
FreeHEAP();
}
void pubConfig() {
bool success;
success = client.publish(MQTT::Publish(prefix, deviceID).set_qos(1));
if (success) {
delay(500);
for (int i = 0; i < nWidgets; i = i + 1) {
success = client.publish(MQTT::Publish(prefix + "/" + deviceID + "/config", thing_config[i]).set_qos(1));
if (success) {
Serial.println("Publish config: Success (" + thing_config[i] + ")");
} else {
Serial.println("Publish config FAIL! (" + thing_config[i] + ")");
}
delay(150);
}
}
if (success) {
Serial.println("Publish config: Success");
} else {
Serial.println("Publish config: FAIL");
}
for (int i = 0; i < nWidgets; i = i + 1) {
pubStatus(sTopic[i], stat[i]);
delay(100);
}
}
void callback(const MQTT::Publish& sub) {
Serial.print("Get data from subscribed topic ");
Serial.print(sub.topic());
Serial.print(" => ");
Serial.println(sub.payload_string());
if ( sub.payload_string() == "HELLO" ) { // handshaking
pubConfig();
}
}
void setup() {
Wire.pins(0, 2);
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
}
delay(50);
temp = String(bmp.readTemperature());
davlen= String(bmp.readPressure()/133);
stat[0] = setStatus( temp );
stat[1] = setStatus( davlen );
WiFi.mode(WIFI_STA);
initVar();
oldtime = 0;
Serial.begin(115200);
delay(10);
Serial.println();
Serial.println();
Serial.println("MQTT client started.");
FreeHEAP();
freeheap = 100000;
WiFi.disconnect();
WiFi.printDiag(Serial);
}
void loop() {
if (WiFi.status() != WL_CONNECTED) {
Serial.print("Connecting via WiFi to ");
Serial.print(ssid);
Serial.println("...");
WiFi.begin(ssid, pass);
if (WiFi.waitForConnectResult() != WL_CONNECTED) {
return;
}
Serial.println("");
Serial.println("WiFi connect: Success");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
if (WiFi.status() == WL_CONNECTED) {
if (!client.connected()) {
Serial.println("Connecting to MQTT server ...");
bool success;
if (mqttuser.length() > 0) {
success = client.connect( MQTT::Connect( deviceID ).set_auth(mqttuser, mqttpass) );
} else {
success = client.connect( deviceID );
}
if (success) {
client.set_callback(callback);
Serial.println("Connect to MQTT server: Success");
client.subscribe(prefix); // for receiving HELLO messages and handshaking
pubConfig();
} else {
Serial.println("Connect to MQTT server: FAIL");
delay(1000);
}
}
if (client.connected()) {
newtime = millis();
if (newtime - oldtime > 10000) { // publish data every 100 sec
temp = String(bmp.readTemperature());
davlen= String(bmp.readPressure()/133);
stat[0] = setStatus( temp );
stat[1] = setStatus( davlen );
for (int i = 0; i < nWidgets; i = i + 1) {
pubStatus(sTopic[i], stat[i]);
delay(100);
}
oldtime = newtime;
}
client.loop();
}
}
}
Классно, мне нравитсяКраткое описание: esp8266 -01 опрашивает датчик давления BMT180, полученные данные (давление и температуру) отправляет брокеру. IoT Manager берет эти данные у брокера и отображает на экране мобильного телефона
не получилось, по крайней мере, здесь нет. почитайте про [inline]pull request[/inline] если есть желание научиться, если нет - скажите я залью сам, или залейте в свой собственный, я поставлю у себя ссылку на гитхабе. Только вот библиотеку лучше со ссылкой на автора (для обновлений)попытался его выложить на github правда не знаю на сколько у меня это получилось
Да, разумеется. Если нужно в чем-то мое участие - без проблем, с удовольствием помогу.Хочу попросить разрешения, на публикацию статьи о данном приложении у себя на сайте.