ESP32 BME680で測定したデータをMariaDBにとばす その2
先日BME680のデータをMariaDBに飛ばしましたが、スタンドアロンで自動測定できるようにプログラムを更新しました。また、Wi-Fiに接続している際にLEDを点灯させることとしました。ピン4番にプルアップ抵抗を介してLEDを接続します。
以下がプログラムです。ブートした際に自動的に走らせるために、プログラム名はmain.pyにしてあります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
from machine import Pin,SoftI2C from bme680 import * import ntptime import utime import ujson import urequests UTC_OFFSET=9 p21 = Pin(21, Pin.IN, Pin.PULL_UP) p23 = Pin(23, Pin.IN, Pin.PULL_UP) led = Pin(4, Pin.OUT) i2c = SoftI2C(scl=Pin(21), sda=Pin(23)) def do_connect(): import network wlan = network.WLAN(network.STA_IF) wlan.active(True) if not wlan.isconnected(): print('connecting to network...') wlan.connect('essid', 'password') while not wlan.isconnected(): pass print('network config:', wlan.ifconfig()) led.value(1) def get_jst(): sleep_ms(1000) ntptime.settime() tm=utime.localtime(utime.mktime(utime.localtime())+UTC_OFFSET*3600) jst = str(tm[0])+'/'+str(tm[1])+'/'+str(tm[2])+' '+str(tm[3])+':'+str(tm[4])+':'+str(tm[5]) return(jst) do_connect() print(get_jst()) while True: try: bme = BME680_I2C(i2c=i2c) temp = str(round(bme.temperature, 2)) hum = str(round(bme.humidity, 2)) pres = str(round(bme.pressure, 2)) gas = str(round(bme.gas/1000, 2)) dict = { "temp_value":temp, "hum_value":hum, "pres_value":pres, "gas_value":gas } response = urequests.post( 'https://***url***/datarcv.php', data=ujson.dumps(dict).encode("utf-8"), headers={'Content-Type': 'application/json'} ) print (response.text) except OSError as e: print('Failed to read sensor.') sleep(10) |
この通りWi-Fiに接続するとLEDがともります。phpMyAdminで確認すると10秒おきにデータが蓄積していきます。