我想用esp8266和micropython直接向Google Forms发送数据(不使用IFTTT等外部服务)。我已经使用了IFTTT,但在这一点上对我来说没有用,我需要一个大于或等于100Hz的采样率,而你知道这超过了IFTTT的使用限制。我试着做了一个RAM缓冲区,但我得到了一个错误,说缓冲区超过了RAM的大小(4 MB),所以这就是为什么我试图直接做。
经过一段时间的尝试,我得到了它的一部分。我说 "部分 "是因为我必须在post-request之后做一个随机的get-request;我不知道为什么它能工作,但它能工作(这样我就能每隔一秒钟向Google Forms发送数据,或者更少)。我想问题是esp8266不能关闭与Google Forms的连接,当它试图做一个新的post-request时,它就会卡住,如果这是问题所在,我不知道如何用其他方法解决,有什么建议吗?完整的代码在这里。
ssid = 'my_network'
password = 'my_password'
import urequests
def do_connect():
import network
sta_if = network.WLAN(network.STA_IF)
if not sta_if.isconnected():
print('connecting to network...')
sta_if.active(True)
sta_if.connect(ssid, password)
while not sta_if.isconnected():
pass
print('network config:', sta_if.ifconfig())
def main():
do_connect()
print ("CONNECTED")
url = 'url_of_my_google_form'
form_data = 'entry.61639300=example' #have to change the entry
user_agent = {'Content-Type': 'application/x-www-form-urlencoded'}
while True:
response = urequests.post(url, data=form_data, headers=user_agent)
print ("DATA HAVE BEEN SENT")
response.close
print("TRYING TO SEND ANOTHER ONE...")
response = urequests.get("http://micropython.org/ks/test.html") #<------ RANDOM URL, I DON'T KNOW WHY THIS CODE WORKS CORRECTLY IN THIS WAY
print("RANDOM GET:")
print(response.text)
response.close
if __name__ == '__main__':
main()
谢谢你的时间,伙计们。另外,我以前也试过用这个代码,但它不工作。如果没有随机获取请求,在发布一两次后就会卡住。
while True:
response = urequests.post(url, data=form_data, headers=user_agent)
print ("DATA HAVE BEEN SENT")
response.close
print("TRYING TO SEND ANOTHER ONE...")
不应该是 response.close()
(带括号)? 🤔,
没有括号的情况下,您可以访问一个(不存在)的 财产 close
对象的 response
而不是调用 办法 close()
,不要真正关闭连接。这可能导致内存溢出。