PicoWでBME280単体でWEBサーバーにPOST送信

#仕様
BMP280がI2C接続で接続(秋月電子)
 1–VCC 2–GND 3–VCC 4–SDA 5–GND 6–SCL
 SDA 16番ピン(GP12)   SCL17番(GP13)  18番GND  36番VCC(2A)   

 BME280_ADDR = 0x76  I2C_SDA = 12 I2C_SCL = 13 I2C_CH = 0
SDA,SCLにVCCから4.7KΩを介してpullupする

#bmp280のライブラリは、ネット上のライブラリを使用

#動作
1.WIFI接続開始 
2.NTPで時刻を取得
以下ループ
 3.bmpライブラリを使って温度、湿度、大気圧の読み込み
 4.データをjsonに
 5.ポストでサーバー送信
 6.サーバーからステータス受信
 7.時間待ち

#ポイント
サーバー側のファイアオールに注意
header = {‘Content-Type’:’application/json’}
WifiのOnOFFはGp23
 machine.Pin(23, machine.Pin.OUT).high()
 machine.Pin(23, machine.Pin.OUT).low()

from machine import Pin, I2C
import time
import bme280
import sys
import urequests
import ujson
import wifi_onoff
import config
import lib_NTP
BME280_ADDR = 0x76
I2C_SDA = 12
I2C_SCL = 13
I2C_CH = 0

i2c = I2C( I2C_CH, scl=Pin( I2C_SCL ), sda=Pin( I2C_SDA ), freq=100000)
i2c.scan()

sensor = bme280.bme280( i2c, BME280_ADDR )
sensor.setup()

wifi = config.wifi_set ()
print( "wifi:",wifi)

ip_add = "no connect"
if wifi == 1:
        ip_add = wifi_onoff.wifi_onoff('on')
        # NTP にて時刻合わせ
        lib_NTP.NTP_set()
print("ip:",ip_add)
while True:
    ( temp, humi, press ) = sensor.get_value()
    #データをDICT型
    data = {"D1":temp,"D2":humi,"D3":press}
    #jsonデータで送信するという事を明示的に宣言
    header = {'Content-Type':'application/json'}
    #HTTPリクエストをPOSTと
    url='http://192.168.11.12/mytest/test_post.php'
    res = urequests.post(url,data = ujson.dumps(data).encode("utf-8"),headers = header)
    #サーバ側からのレスポンスを受け取って表示
    print (res.json())
    #終了
    res.close()
    print( "Temperature:{:.2f}C  Humidity:{:.2f}%  Pressure:{:.2f}hPa".format( temp, humi, press ) )
    #sys.exit()
    time.sleep(2)




カテゴリー iot