ESP8266 запрашивает несколько HTTP GET одновременно

У корневых окон Tkinter есть метод, называемый after, который можно использовать для планирования функции, которая будет вызываться через определенный период времени. Если сама эта функция вызывает after, вы настроили автоматически повторяющееся событие.

Вот рабочий пример:

# for python 3.x use 'tkinter' rather than 'Tkinter'
import Tkinter as tk
import time

class App():
    def __init__(self):
        self.root = tk.Tk()
        self.label = tk.Label(text="")
        self.label.pack()
        self.update_clock()
        self.root.mainloop()

    def update_clock(self):
        now = time.strftime("%H:%M:%S")
        self.label.configure(text=now)
        self.root.after(1000, self.update_clock)

app=App()

Имейте в виду, что after не гарантирует, что функция будет работать точно вовремя. Только расписал задание, которое должно выполняться через определенное количество времени. Это приложение занято, может быть задержка до того, как он будет вызван, поскольку Tkinter является однопоточным. Задержка обычно измеряется в микросекундах.

1
задан jnkllnbrn 2 March 2019 в 22:16
поделиться

2 ответа

Вы обновляете данные одновременно, возвращая все три значения в одном запросе.

Это был бы способ сделать это с любым веб-сервером, не говоря уже о том, чтобы работать на чрезвычайно ограниченном процессоре, таком как ESP8266.

Вы можете вернуть все три значения одновременно с помощью кода, который выглядит примерно так:

void handleAll() {
  String results_json = "{ \"temperature\": " + String(temp) + ",", +
                           "\"high\": " + String(hoechst) + "," +
                           "\"low\": " + String(tiefst) + " }";

  server.send(200, "application/json", results_json);
}

Это составляет объект JSON со всеми тремя значениями в нем. JSON - это «объектная нотация JavaScript», и Javascript очень легко собрать и разобрать.

Вам также необходимо обновить код веб-сервера ESP8266, чтобы добавить

server.on("/readAll", handleAll);

С помощью этого изменения вы можете исключить остальные три обработчика / read.

И вам нужно обновить ваш Javascript. Вам просто нужно сделать один вызов в Javascript, преобразовать возвращаемый текст в объект Javascript и прочитать каждое из трех значений из него, чтобы установить элементы в DOM. Это то, что jQuery может сделать так тривиально для вас.

И это 'text/plain', а не 'text/plane'.

Вы также можете проверить jQuery - это значительно упростит ваш код Javascript.

0
ответ дан John Romkey 2 March 2019 в 22:16
поделиться

Проще говоря: вы не можете обновлять данные одновременно, потому что есть только одно ядро ​​ЦП. Кроме того, вы должны проектировать с учетом экономии, вам нужно иметь три транзакции, чтобы получить несколько чисел ... Одна из самых простых форм базы данных - это CSV, или «значения, разделенные запятыми»; по существу: значения, разделенные запятыми.

Зная порядок, в котором ваши температуры будут находиться в списке (низкий, текущий, высокий), вы можете просто создать новую переменную или объединить свои переменные в операторе, который выводит данные, это низкий "," текущий " , "high, и это вернет вам что-то вроде -1.23455,23.53556,37.23432, которое вы можете легко разделить на три, посмотрев запятые и используя строковые операторы.

Теперь вы можете получить свои три значения из одной транзакции с устройства с низкой спецификацией!

Удачи! :)

0
ответ дан poorandunlucky 2 March 2019 в 22:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: