Python: несколько запросов.постов с GPIO.setup - PullRequest
0 голосов
/ 15 марта 2020

Я использую Raspberry Pi и хочу проверить, является ли вход высоким или низким, используя GPIO. Исходя из этого, я хочу отправить запрос на публикацию на веб-сервер. Однако теперь он зацикливается, что приводит к нескольким вызовам на мой веб-сервер одновременно. Как я могу предотвратить это, чтобы почтовый запрос вызывался только один раз? Это то, что я пробовал до сих пор, но это не решает проблему.

import requests
import time
import RPi.GPIO as GPIO
from time import sleep
from datetime import datetime

file = open("/home/pi/Documents/datalogger/data/datalog.csv", "a")
i=0
lastValue = ""
userId = 1


def update_value(status):
      print( status )
      file.write(str(datetime.now())+"\n")
      file.flush()
      url = 'https://mywebserver.nl/project/log/api'
      dload = {'userId': userId, 'status': status, 'datetime': datetime.now()}
      x = requests.post(url, params = dload)
      print(x.content)
      return status;

GPIO.setmode(GPIO.BOARD)
GPIO.setup(16, GPIO.IN, pull_up_down=GPIO.PUD_UP)

while True:
    buttonState = GPIO.input(16)
    if buttonState == 0:
        if lastValue != "started":
            lastValue = update_value("started")
    else:
        if lastValue != "stopped":
            lastValue = update_value("stopped")
    time.sleep(1)

1 Ответ

0 голосов
/ 15 марта 2020

Это должно удалить несколько вызовов для одного и того же состояния, так как оно изменит состояние только в случае изменения состояния,

import requests
import time
import RPi.GPIO as GPIO
from time import sleep
from datetime import datetime

file = open("/home/pi/Documents/datalogger/data/datalog.csv", "a")
i=0
lastValue = 0
userId = 1


def update_value(status):
      print( status )
      file.write(str(datetime.now())+"\n")
      file.flush()
      url = 'https://mywebserver.nl/project/log/api'
      dload = {'userId': userId, 'status': status, 'datetime': datetime.now()}
      x = requests.post(url, params = dload)
      print(x.content)
      return status;

GPIO.setmode(GPIO.BOARD)
GPIO.setup(16, GPIO.IN, pull_up_down=GPIO.PUD_UP)

while True:
    buttonState = GPIO.input(16)
    if buttonState != lastValue:
        if lastValue:
            lastValue = update_value("stopped")
        else:
            lastValue = update_value("started")

    time.sleep(1)
...