数码之家

 找回密码
 立即注册
搜索
查看: 3148|回复: 11

[ESP8266_MicroPython]TM1637/DHT11/蜂鸣器

[复制链接]
发表于 2020-4-18 17:41:26 | 显示全部楼层 |阅读模式
本帖最后由 mao_jin_dao 于 2020-4-18 18:31 编辑

功能
联网,时间获取,时钟显示,环境温湿度读取,环境信息上传, 整点蜂鸣

代码
tm1637.py
文件见micropython-tm1637


main.py
  1. from machine import Pin, I2C
  2. from ssd1306 import SSD1306_I2C
  3. import urequests as requests
  4. import network
  5. import time
  6. import tm1637
  7. import dht


  8. def connectionWifi(ssid, password):
  9.   wlan = network.WLAN(network.STA_IF)
  10.   wlan.active(True)
  11.   wlan.connect(ssid, password)
  12.   while True:
  13.     if not wlan.isconnected():
  14.       time.sleep_ms(2000)
  15.     else:
  16.       print('connected to network')
  17.       break

  18. def getJsonInfoFromURL(url):
  19.   response = requests.get(url)
  20.   return response.json()

  21. def tm1637_LED(hours, minutes):
  22.   if hours > 22 or hours < 6:
  23.     tm.brightness(0)
  24.   else:
  25.     tm.brightness(7)
  26.   tm.numbers(hours, minutes)


  27. def buzzer(hours, minutes):
  28.   if hours == 7 and minutes == 0:
  29.     buzzer_seconds(10)
  30.   if hours >= 22 :
  31.     if minutes%2 == 0:
  32.       buzzer_seconds(hours/2)

  33.     if minutes == 30:
  34.       buzzer_seconds(1)

  35. def buzzer_seconds(seconds):
  36.   bing.value(1)
  37.   print ("should buzzer")
  38.   time.sleep_ms(seconds * 1000)
  39.   bing.value(0)
  40.   
  41.    
  42. def getTHFromDHT11(dht11):
  43.   dht11.measure()
  44.   return dht11.temperature(),dht11.humidity()
  45.   
  46. def uploadTempAndHumidity(dht11,url,position):
  47.   temperature, humidity = getTHFromDHT11(dht11)
  48.   url = url+"/"+position+"/"+str(temperature)+"/"+str(humidity)
  49.   print(url)
  50.   requests.get(url)
  51.   
  52. def myDHT11(hours,minutes, dth11, url, position):
  53.   global dht11_last_hours
  54.   if hours != dht11_last_hours:
  55.     uploadTempAndHumidity(dht11, dht11_api, "home")
  56.     dht11_last_hours = hours
  57.   
  58. if __name__== '__main__':

  59.   ssid='****'
  60.   password='****'
  61.   time_api="http://ip/bills/ESP8266TimeAPI"
  62.   dht11_api="http://ip/temperature"
  63.   position="home"

  64.   tm = tm1637.TM1637(clk=Pin(5), dio=Pin(4))
  65.   bing = Pin(12,Pin.OUT)
  66.   dht11 = dht.DHT11(machine.Pin(14))
  67.   dht11_last_hours = 0

  68.   connectionWifi(ssid, password)

  69.   while True:
  70.     try:
  71.       result = getJsonInfoFromURL(time_api)
  72.       tm1637_LED(result['hours'], result['minutes'])
  73.       buzzer(result['hours'], result['minutes'])
  74.       myDHT11(result['hours'], result['minutes'], dht11, dht11_api, position)
  75.       time.sleep_ms(10000)
  76.     except:
  77.       connectionWifi(ssid, password)
  78.       tm = tm1637.TM1637(clk=Pin(5), dio=Pin(4))
  79.       bing = Pin(12,Pin.OUT)
  80.       dht11 = dht.DHT11(machine.Pin(14))
  81.       bing.value(0)

复制代码

图片








补充内容 (2020-5-26 21:30):
def getTHFromDHT11(dht11)函数修改如下
# 以多次读值求平均数的方式降低传感器误差
def getTHFromDHT11(dht11):
  print ("enter into getTHFromFHT11")
  sumT=0
  sumH=0
  repeats=...

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 2家元 +28 收起 理由
qingkong + 18
人艰不拆了 + 10

查看全部打赏

发表于 2020-4-18 22:52:13 | 显示全部楼层
哈哈,你这个语言我看不懂:loveliness:
回复 支持 反对

使用道具 举报

发表于 2020-4-18 23:14:39 来自手机浏览器 | 显示全部楼层
建议考虑一下mqtt协议

mqtt不是http 公网比较友好 而且 百度 阿里啥的都有免费消息服务 自己玩也方便

打赏

参与人数 1家元 +20 收起 理由
人艰不拆了 + 20

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-19 12:22:28 | 显示全部楼层
qingkong 发表于 2020-4-18 23:14
建议考虑一下mqtt协议

mqtt不是http 公网比较友好 而且 百度 阿里啥的都有免费消息服务 自己玩也方便 ...

嗯,后面搞Home Assistant时再考虑MQTT。
现在在搞各种传感器,就用的自己熟悉的东西传递数据。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-19 12:25:49 | 显示全部楼层
人艰不拆了 发表于 2020-4-18 22:52
哈哈,你这个语言我看不懂

啊哈,我不信,除非你...
Python的精简版吧,python解释型 弱类型 语言,面向过程面向对象都可以。
回复 支持 反对

使用道具 举报

发表于 2020-4-19 13:55:54 来自手机浏览器 | 显示全部楼层
mao_jin_dao 发表于 2020-4-19 12:25
啊哈,我不信,除非你...
Python的精简版吧,python解释型 弱类型 语言,面向过程面向对象都可以。
...

关键是可以try:

这项技能导致随便写写的程序,健壮性急剧提高:lol:
回复 支持 1 反对 0

使用道具 举报

发表于 2020-4-22 09:55:50 | 显示全部楼层
Server酱了解一下,可以直接用requests.get调用,推送消息到微信
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-23 20:35:24 | 显示全部楼层
zsp1123 发表于 2020-4-22 09:55
Server酱了解一下,可以直接用requests.get调用,推送消息到微信

据说要用小号,否则容易异常。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-26 21:31:17 | 显示全部楼层
  1. # 以多次读值求平均数的方式降低传感器误差
  2. def getTHFromDHT11(dht11):
  3.   print ("enter into getTHFromFHT11")
  4.   sumT=0
  5.   sumH=0
  6.   repeats=5
  7.   for i in range(repeats):
  8.     dht11.measure()
  9.     sumT += dht11.temperature()
  10.     sumH += dht11.humidity()
  11.     print ("sumT is "+str(sumT))
  12.     print ("sumH is "+str(sumH))
  13.     time.sleep_ms(1000)
  14.   return sumT/repeats, sumH/repeats;  
复制代码
回复 支持 反对

使用道具 举报

发表于 2020-6-20 18:53:58 | 显示全部楼层
你好啊。我看到你的“TM1637/DHT11/蜂鸣器”这个贴,我想问一下,我用传感器DHT21为什么用你的dht类库不能显示温度和湿度。是因为dht类库不能用在dht21上吗?
回复 支持 反对

使用道具 举报

发表于 2020-6-20 18:56:40 | 显示全部楼层

看看错误信息是eTimeout,是超时吗?
我用的是Nodemcu 接d2口
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-22 21:52:54 | 显示全部楼层
shinfly 发表于 2020-6-20 18:56
看看错误信息是eTimeout,是超时吗?
我用的是Nodemcu 接d2口

接口定义正确了吗?
https://randomnerdtutorials.com/ ... re-humidity-sensor/
我看了这篇教程,看来是支持dht21的。
你可以看看,再检查下线路。
祝成功。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-16 18:06 , Processed in 0.327601 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表