servo support added

This commit is contained in:
Dmitry Borisenko
2020-04-25 16:39:36 +02:00
parent 696c51b113
commit ac5b7e5775
14 changed files with 299 additions and 100 deletions

93
Cmd.ino
View File

@@ -25,6 +25,9 @@ void CMD_init() {
sCmd.addCommand("stepper", stepper);
sCmd.addCommand("stepperSet", stepperSet);
sCmd.addCommand("servo", servo_);
sCmd.addCommand("servoSet", servoSet);
sCmd.addCommand("logging", logging);
sCmd.addCommand("inputDigit", inputDigit);
@@ -271,6 +274,7 @@ void handle_time_init() {
ts.add(TIME, 1000, [&](void*) {
String tmp = GetTime();
jsonWriteStr(configJson, "time", tmp);
tmp.replace(":", "-");
jsonWriteStr(configJson, "timenowSet", tmp);
eventGen ("timenowSet", "");
@@ -367,7 +371,96 @@ void stepperSet() {
}
}
//servo 1 13 50 Мой#сервопривод Сервоприводы 0 100 0 180 2
void servo_() {
String servo_number = sCmd.next();
String servo_pin = sCmd.next();
String start_state = sCmd.next();
int start_state_int = start_state.toInt();
String widget_name = sCmd.next();
String page_name = sCmd.next();
String min_value = sCmd.next();
String max_value = sCmd.next();
String min_deg = sCmd.next();
String max_deg = sCmd.next();
String page_number = sCmd.next();
jsonWriteStr(optionJson, "servo_pin" + servo_number, servo_pin);
start_state_int = map(start_state_int, min_value.toInt(), max_value.toInt(), min_deg.toInt(), max_deg.toInt());
if (servo_number == "1") {
#ifdef ESP8266
myServo1.attach(servo_pin.toInt());
myServo1.write(start_state_int);
#endif
#ifdef ESP32
myServo1.attach(servo_pin.toInt(), 500, 2400);
myServo1.write(start_state_int);
#endif
}
if (servo_number == "2") {
#ifdef ESP8266
myServo2.attach(servo_pin.toInt());
myServo2.write(start_state_int);
#endif
#ifdef ESP32
myServo2.attach(servo_pin.toInt(), 500, 2400);
myServo2.write(start_state_int);
#endif
}
jsonWriteStr(optionJson, "s_min_val" + servo_number, min_value);
jsonWriteStr(optionJson, "s_max_val" + servo_number, max_value);
jsonWriteStr(optionJson, "s_min_deg" + servo_number, min_deg);
jsonWriteStr(optionJson, "s_max_deg" + servo_number, max_deg);
jsonWriteStr(configJson, "servoSet" + servo_number, start_state);
createWidgetParam (widget_name, page_name, page_number, "widgets/widget.range.json", "servoSet" + servo_number, "min", min_value, "max", max_value, "k", "1");
}
void servoSet() {
String servo_number = sCmd.next();
String servo_state = sCmd.next();
int servo_state_int = servo_state.toInt();
int pin = jsonReadtoInt(optionJson, "servo_pin" + servo_number);
servo_state_int = map(servo_state_int,
jsonReadtoInt(optionJson, "s_min_val" + servo_number),
jsonReadtoInt(optionJson, "s_max_val" + servo_number),
jsonReadtoInt(optionJson, "s_min_deg" + servo_number),
jsonReadtoInt(optionJson, "s_max_deg" + servo_number));
if (servo_number == "1") {
#ifdef ESP8266
myServo1.write(servo_state_int);
#endif
#ifdef ESP32
myServo1.write(servo_state_int);
#endif
}
if (servo_number == "2") {
#ifdef ESP8266
myServo2.write(servo_state_int);
#endif
#ifdef ESP32
myServo2.write(servo_state_int);
#endif
}
//Serial.println(servo_state_int);
eventGen ("servoSet", servo_number);
jsonWriteStr(configJson, "servoSet" + servo_number, servo_state);
sendSTATUS("servoSet" + servo_number, servo_state);
}
//====================================================================================================================================================
/*
void inputText() {

View File

@@ -138,6 +138,10 @@ void prsets_init() {
writeFile("firmware.s.txt", readFile("configs/stepper.s.txt", 2048));
}
if (value == "18") {
writeFile("firmware.c.txt", readFile("configs/servo.c.txt", 2048));
writeFile("firmware.s.txt", readFile("configs/servo.s.txt", 2048));
}
if (value == "19") {
writeFile("firmware.c.txt", readFile("configs/firmware.c.txt", 2048));
writeFile("firmware.s.txt", readFile("configs/firmware.s.txt", 2048));
}

View File

@@ -113,6 +113,7 @@ void sendLogData(String file, String topic, boolean type) {
if (type) {
//----------------------------------------------
String log_date = readFile(file, 5000);
if (log_date != "Failed") {
log_date.replace("\r\n", "\n");
log_date.replace("\r", "\n");
String buf = "{}";
@@ -141,6 +142,7 @@ void sendLogData(String file, String topic, boolean type) {
sendCHART(topic, json_array);
json_array = "";
getMemoryLoad("[i] after send log date");
}
//----------------------------------------------
} else {
//----------------------------------------------

View File

@@ -15,11 +15,40 @@ void createWidget (String widget_name, String page_name, String page_number, St
jsonWriteStr(widget, "order", page_number);
jsonWriteStr(widget, "descr", widget_name);
jsonWriteStr(widget, "topic", prex + "/" + topic);
#ifdef layout_in_ram
#ifdef layout_in_ram
all_widgets += widget + "\r\n";
#else
#else
addFile("layout.txt", widget);
#endif
#endif
widget = "";
}
void createWidgetParam (String widget_name, String page_name, String page_number, String file, String topic, String name1, String param1, String name2, String param2, String name3, String param3) {
String widget;
widget = readFile(file, 1024);
if (widget == "Failed") return;
if (widget == "Large") return;
widget_name.replace("#", " ");
page_name.replace("#", " ");
jsonWriteStr(widget, "page", page_name);
jsonWriteStr(widget, "order", page_number);
jsonWriteStr(widget, "descr", widget_name);
jsonWriteStr(widget, "topic", prex + "/" + topic);
if (name1 != "") jsonWriteStr(widget, name1, param1);
if (name2 != "") jsonWriteStr(widget, name2, param2);
if (name3 != "") jsonWriteStr(widget, name3, param3);
#ifdef layout_in_ram
all_widgets += widget + "\r\n";
#else
addFile("layout.txt", widget);
#endif
widget = "";
}
@@ -40,10 +69,11 @@ void createChart (String widget_name, String page_name, String page_number, Str
jsonWriteStr(widget, "series", widget_name);
jsonWriteStr(widget, "maxCount", maxCount);
jsonWriteStr(widget, "topic", prex + "/" + topic);
#ifdef layout_in_ram
#ifdef layout_in_ram
all_widgets += widget + "\r\n";
#else
#else
addFile("layout.txt", widget);
#endif
#endif
widget = "";
}

View File

@@ -14,5 +14,6 @@
"scenario": "1",
"pushingbox_id": "v7C133E426B0C69E",
"web_login": "admin",
"web_pass": "admin"
"web_pass": "admin",
"udponoff": "1"
}

17
data/configs/servo.c.txt Normal file
View File

@@ -0,0 +1,17 @@
servo 1 12 50 Мой#сервопривод Сервоприводы 0 100 0 180 1
servo 2 13 50 Мой#сервопривод Сервоприводы 0 100 0 180 2
button 1 na Открыть1 Сервоприводы 0 3
button 2 na Открыть2 Сервоприводы 0 4
//Можно создавать не более двух сервоприводов на одном устройстве.
//1 - номер привода
//12 - номер пина
//50 - начальное значение в процентах
//0 - 100 диапазон ползунка
//0 - 180 диапазон угла
//Представим ситуацию когда есть некая заслонка и при угле в 30 градусов она закрыта,
//а при угле в 90 градусов открыта. В этом случае необходимо написать
//0 100 30 90 и тогда поставив ползунок в 0 % серва встанет в положение 30 градусов,
//а если поставить ползунок в 100 % серва встанет в положение 90 градусов.

12
data/configs/servo.s.txt Normal file
View File

@@ -0,0 +1,12 @@
button1 = 1
servoSet 1 100
end
button1 = 0
servoSet 1 0
end
button2 = 1
servoSet 2 100
end
button2 = 0
servoSet 2 0
end

View File

@@ -50,7 +50,8 @@
"/preset?arg=15": "15.Датчик движения включающий свет",
"/preset?arg=16": "16.Охранный датчик движения",
"/preset?arg=17": "17.Система управления шаговыми двигателями на основе драйвера A4988 (открытие закрытие штор)",
"/preset?arg=18": "Настройки по умолчанию"
"/preset?arg=18": "18.Система управления сервоприводами",
"/preset?arg=19": "Настройки по умолчанию"
}
},
{

View File

@@ -35,13 +35,13 @@
{
"type": "link",
"title": "Переформировать список устройств",
"action": "udp?arg=2",
"action": "udp?arg=3",
"class": "btn btn-block btn-success"
},
{
"type": "link",
"title": "Обновить страницу",
"action": "udp?arg=3",
"action": "udp?arg=4",
"class": "btn btn-block btn-success"
},
{
@@ -59,7 +59,7 @@
{
"type": "input",
"title": "Имя устройства",
"name":"dev_name",
"name": "dev_name",
"state": "{{name}}",
"pattern": "[A-Za-z0-9]{6,12}"
},
@@ -72,6 +72,16 @@
{
"type": "hr"
},
{
"type": "checkbox",
"name": "udponoff",
"title": "Включить обмен данными между устройствами",
"action": "/udp?arg=[[udponoff]]",
"state": "{{udponoff}}"
},
{
"type": "hr"
},
{
"type": "link",
"title": "Главная",

View File

@@ -23,6 +23,10 @@
"type": "h4",
"title": "Uptime: {{uptime}}"
},
{
"type": "h4",
"title": "Time: {{time}}"
},
{
"type": "h4",
"title": "Build version: {{firmware_version}}"

View File

@@ -84,7 +84,7 @@
{
"type": "button",
"title": "Отправить настройки MQTT с этого устройства на все остальные",
"action": "udp?arg=1",
"action": "udp?arg=2",
"class": "btn btn-block btn-success"
},

View File

@@ -28,7 +28,9 @@ void pushControl() {
WiFiClient client_push;
Serial.println("- connecting to pushing server: " + String(logServer));
if (client_push.connect(logServer, 80)) {
if (!client_push.connect(logServer, 80)) {
Serial.println("- not connected");
} else {
Serial.println("- succesfully connected");
String postStr = "devid=";

11
set.h
View File

@@ -31,6 +31,9 @@ boolean mb_4_of_memory = true;
ESP8266HTTPUpdateServer httpUpdater;
#include <WiFiUdp.h>
WiFiUDP Udp;
#include <Servo.h>
Servo myServo1;
Servo myServo2;
#ifdef MDNS_enable
#include <ESP8266mDNS.h>
@@ -40,13 +43,16 @@ WiFiUDP Udp;
//===============библиотеки и объекты для ESP32===========================
#ifdef ESP32
#include <WiFi.h>
#include <HTTPClient.h>
#include <HTTPUpdate.h>
#include <SPIFFS.h>
#include <AsyncTCP.h>
#include <analogWrite.h>
#include <HTTPUpdate.h>
#include <HTTPClient.h>
#include "AsyncUDP.h"
AsyncUDP udp;
#include <ESP32_Servo.h>
Servo myServo1;
Servo myServo2;
#ifdef MDNS_enable
#include <ESPmDNS.h>
@@ -103,6 +109,7 @@ DallasTemperature sensors;
#include <DHTesp.h>
DHTesp dht;
#include <Wire.h>
//===============FIRMWARE VARS========================
boolean just_load = true;
const char* hostName = "IoT Manager";

20
udp.ino
View File

@@ -4,16 +4,24 @@ void UDP_init() {
if (request->hasArg("arg")) {
value = request->getParam("arg")->value();
}
if (value == "0") {
jsonWriteStr(configSetup, "udponoff", value);
request->send(200, "text/text", "ok");
}
if (value == "1") {
mqtt_send_settings_to_udp = true;
jsonWriteStr(configSetup, "udponoff", value);
request->send(200, "text/text", "ok");
}
if (value == "2") {
mqtt_send_settings_to_udp = true;
request->send(200, "text/text", "ok");
}
if (value == "3") {
SPIFFS.remove("/dev.csv");
addFile("dev.csv", "device id;device name;ip address");
request->redirect("/?dev");
}
if (value == "3") {
if (value == "4") {
request->redirect("/?dev");
}
});
@@ -39,6 +47,7 @@ void UDP_init() {
udp_period = random(20000, 40000);
ts.add(UDP, udp_period, [&](void*) {
if (jsonRead(configSetup, "udponoff") == "1") {
if (WiFi.status() == WL_CONNECTED) {
if (!udp_busy) {
String line_to_send = "iotm;" + chipID + ";" + jsonRead(configSetup, "name");
@@ -53,11 +62,13 @@ void UDP_init() {
Serial.println("[UDP<=] dev info send");
}
}
}
}, nullptr, false);
}
void handleUdp() {
#ifdef ESP8266
if (jsonRead(configSetup, "udponoff") == "1") {
if (WiFi.status() == WL_CONNECTED) {
int packetSize = Udp.parsePacket();
if (packetSize) {
@@ -79,6 +90,7 @@ void handleUdp() {
}
}
}
#endif
}
@@ -88,6 +100,7 @@ void handleUdp_esp32() {
udp.onPacket([](AsyncUDPPacket packet) {
received_udp_line = (char*)packet.data();
received_ip = packet.remoteIP().toString();
if (jsonRead(configSetup, "udponoff") == "1") {
if (received_udp_line.indexOf("iotm;") >= 0) {
udp_data_parse = true;
@@ -96,6 +109,7 @@ void handleUdp_esp32() {
udp_data_parse = true;
}
}
});
}
#endif
@@ -131,6 +145,7 @@ void add_dev_in_list(String fileName, String id, String dev_name, String ip) {
}
void send_mqtt_to_udp() {
if (jsonRead(configSetup, "udponoff") == "1") {
if (WiFi.status() == WL_CONNECTED) {
udp_busy = true;
String mqtt_data = "{}";
@@ -151,4 +166,5 @@ void send_mqtt_to_udp() {
Serial.println("[UDP<=] mqtt info send");
udp_busy = false;
}
}
}