{"id":366,"date":"2021-03-01T20:07:00","date_gmt":"2021-03-01T11:07:00","guid":{"rendered":"https:\/\/sakae-shokai.com\/?p=366"},"modified":"2021-03-01T18:09:23","modified_gmt":"2021-03-01T09:09:23","slug":"esp32-%e8%a4%87%e5%90%88%e3%82%bb%e3%83%b3%e3%82%b5bme680","status":"publish","type":"post","link":"https:\/\/sakae-shokai.com\/wordpress\/?p=366","title":{"rendered":"ESP32 \u8907\u5408\u30bb\u30f3\u30b5BME680"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u5148\u65e5\u304a\u77e5\u3089\u305b\u3057\u305fBME680\u306b\u3088\u308b\u6e29\u6e7f\u5ea6\u6c17\u5727\u3001\u30ac\u30b9\u6fc3\u5ea6\u306e\u5206\u6790\u3067\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/sakae-shokai.com\/wordpress\/wp-content\/uploads\/2021\/03\/DD17F59F-BE49-41E0-9DCE-F43B0370CBD4-1024x768.jpeg\" alt=\"\" class=\"wp-image-371\" srcset=\"https:\/\/sakae-shokai.com\/wordpress\/wp-content\/uploads\/2021\/03\/DD17F59F-BE49-41E0-9DCE-F43B0370CBD4-1024x768.jpeg 1024w, https:\/\/sakae-shokai.com\/wordpress\/wp-content\/uploads\/2021\/03\/DD17F59F-BE49-41E0-9DCE-F43B0370CBD4-300x225.jpeg 300w, https:\/\/sakae-shokai.com\/wordpress\/wp-content\/uploads\/2021\/03\/DD17F59F-BE49-41E0-9DCE-F43B0370CBD4-768x576.jpeg 768w, https:\/\/sakae-shokai.com\/wordpress\/wp-content\/uploads\/2021\/03\/DD17F59F-BE49-41E0-9DCE-F43B0370CBD4-1536x1152.jpeg 1536w, https:\/\/sakae-shokai.com\/wordpress\/wp-content\/uploads\/2021\/03\/DD17F59F-BE49-41E0-9DCE-F43B0370CBD4.jpeg 1920w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption>SCL\u306f21\u30d4\u30f3\u3001SDA\u306f23\u30d4\u30f3\u306b\u3064\u306a\u304e\u307e\u3057\u305f\u3002<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u4eca\u56de\u306f\u79cb\u6708\u96fb\u5b50\u306e\u30bb\u30f3\u30b5\u3092\u7528\u3044\u3066\u3044\u307e\u3059\u304c\u3001\u540c\u3058\u3088\u3046\u306bAdafruit\u3067\u3082\u540c\u69d8\u306e\u30bb\u30f3\u30b5\u30ad\u30c3\u30c8\u3092\u7528\u610f\u3057\u3066\u304a\u308a\u3001Github\u306b\u3066MicroPython\u7528\u306b\u7528\u610f\u3055\u308c\u3066\u3044\u308bAdafruit<a href=\"https:\/\/github.com\/robert-hh\/BME680-Micropython\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"https:\/\/github.com\/robert-hh\/BME680-Micropython\">https:\/\/github.com\/robert-hh\/BME680-Micropython<\/a>\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u7528\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u307e\u305a\u306f\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u3059\u3002<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:python decode:true \" title=\"bme680.py\"># The MIT License (MIT)\n#\n# Copyright (c) 2017 ladyada for Adafruit Industries\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy\n# of this software and associated documentation files (the \"Software\"), to deal\n# in the Software without restriction, including without limitation the rights\n# to use, copy, modify, merge, publish, distribute, sublicense, and\/or sell\n# copies of the Software, and to permit persons to whom the Software is\n# furnished to do so, subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in\n# all copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n# THE SOFTWARE.\n\n# We have a lot of attributes for this complex sensor.\n# pylint: disable=too-many-instance-attributes\n\n\"\"\"\n`bme680` - BME680 - Temperature, Humidity, Pressure &amp; Gas Sensor\n================================================================\n\nMicroPython driver from BME680 air quality sensor, based on Adafruit_bme680\n\n* Author(s): Limor 'Ladyada' Fried of Adafruit\n             Jeff Raber (SPI support)\n             and many more contributors\n\"\"\"\n\nimport time\nimport math\nfrom micropython import const\nfrom ubinascii import hexlify as hex\ntry:\n    import struct\nexcept ImportError:\n    import ustruct as struct\n\n#    I2C ADDRESS\/BITS\/SETTINGS\n#    -----------------------------------------------------------------------\n_BME680_CHIPID = const(0x61)\n\n_BME680_REG_CHIPID = const(0xD0)\n_BME680_BME680_COEFF_ADDR1 = const(0x89)\n_BME680_BME680_COEFF_ADDR2 = const(0xE1)\n_BME680_BME680_RES_HEAT_0 = const(0x5A)\n_BME680_BME680_GAS_WAIT_0 = const(0x64)\n\n_BME680_REG_SOFTRESET = const(0xE0)\n_BME680_REG_CTRL_GAS = const(0x71)\n_BME680_REG_CTRL_HUM = const(0x72)\n_BME280_REG_STATUS = const(0xF3)\n_BME680_REG_CTRL_MEAS = const(0x74)\n_BME680_REG_CONFIG = const(0x75)\n\n_BME680_REG_PAGE_SELECT = const(0x73)\n_BME680_REG_MEAS_STATUS = const(0x1D)\n_BME680_REG_PDATA = const(0x1F)\n_BME680_REG_TDATA = const(0x22)\n_BME680_REG_HDATA = const(0x25)\n\n_BME680_SAMPLERATES = (0, 1, 2, 4, 8, 16)\n_BME680_FILTERSIZES = (0, 1, 3, 7, 15, 31, 63, 127)\n\n_BME680_RUNGAS = const(0x10)\n\n_LOOKUP_TABLE_1 = (2147483647.0, 2147483647.0, 2147483647.0, 2147483647.0, 2147483647.0,\n                   2126008810.0, 2147483647.0, 2130303777.0, 2147483647.0, 2147483647.0,\n                   2143188679.0, 2136746228.0, 2147483647.0, 2126008810.0, 2147483647.0,\n                   2147483647.0)\n\n_LOOKUP_TABLE_2 = (4096000000.0, 2048000000.0, 1024000000.0, 512000000.0, 255744255.0, 127110228.0,\n                   64000000.0, 32258064.0, 16016016.0, 8000000.0, 4000000.0, 2000000.0, 1000000.0,\n                   500000.0, 250000.0, 125000.0)\n\n\ndef _read24(arr):\n    \"\"\"Parse an unsigned 24-bit value as a floating point and return it.\"\"\"\n    ret = 0.0\n    #print([hex(i) for i in arr])\n    for b in arr:\n        ret *= 256.0\n        ret += float(b &amp; 0xFF)\n    return ret\n\n\nclass Adafruit_BME680:\n    \"\"\"Driver from BME680 air quality sensor\n\n       :param int refresh_rate: Maximum number of readings per second. Faster property reads\n         will be from the previous reading.\"\"\"\n    def __init__(self, *, refresh_rate=10):\n        \"\"\"Check the BME680 was found, read the coefficients and enable the sensor for continuous\n           reads.\"\"\"\n        self._write(_BME680_REG_SOFTRESET, [0xB6])\n        time.sleep(0.005)\n\n        # Check device ID.\n        chip_id = self._read_byte(_BME680_REG_CHIPID)\n        if chip_id != _BME680_CHIPID:\n            raise RuntimeError('Failed to find BME680! Chip ID 0x%x' % chip_id)\n\n        self._read_calibration()\n\n        # set up heater\n        self._write(_BME680_BME680_RES_HEAT_0, [0x73])\n        self._write(_BME680_BME680_GAS_WAIT_0, [0x65])\n\n        self.sea_level_pressure = 1013.25\n        \"\"\"Pressure in hectoPascals at sea level. Used to calibrate ``altitude``.\"\"\"\n\n        # Default oversampling and filter register values.\n        self._pressure_oversample = 0b011\n        self._temp_oversample = 0b100\n        self._humidity_oversample = 0b010\n        self._filter = 0b010\n\n        self._adc_pres = None\n        self._adc_temp = None\n        self._adc_hum = None\n        self._adc_gas = None\n        self._gas_range = None\n        self._t_fine = None\n\n        self._last_reading = 0\n        self._min_refresh_time = 1000 \/ refresh_rate\n\n    @property\n    def pressure_oversample(self):\n        \"\"\"The oversampling for pressure sensor\"\"\"\n        return _BME680_SAMPLERATES[self._pressure_oversample]\n\n    @pressure_oversample.setter\n    def pressure_oversample(self, sample_rate):\n        if sample_rate in _BME680_SAMPLERATES:\n            self._pressure_oversample = _BME680_SAMPLERATES.index(sample_rate)\n        else:\n            raise RuntimeError(\"Invalid oversample\")\n\n    @property\n    def humidity_oversample(self):\n        \"\"\"The oversampling for humidity sensor\"\"\"\n        return _BME680_SAMPLERATES[self._humidity_oversample]\n\n    @humidity_oversample.setter\n    def humidity_oversample(self, sample_rate):\n        if sample_rate in _BME680_SAMPLERATES:\n            self._humidity_oversample = _BME680_SAMPLERATES.index(sample_rate)\n        else:\n            raise RuntimeError(\"Invalid oversample\")\n\n    @property\n    def temperature_oversample(self):\n        \"\"\"The oversampling for temperature sensor\"\"\"\n        return _BME680_SAMPLERATES[self._temp_oversample]\n\n    @temperature_oversample.setter\n    def temperature_oversample(self, sample_rate):\n        if sample_rate in _BME680_SAMPLERATES:\n            self._temp_oversample = _BME680_SAMPLERATES.index(sample_rate)\n        else:\n            raise RuntimeError(\"Invalid oversample\")\n\n    @property\n    def filter_size(self):\n        \"\"\"The filter size for the built in IIR filter\"\"\"\n        return _BME680_FILTERSIZES[self._filter]\n\n    @filter_size.setter\n    def filter_size(self, size):\n        if size in _BME680_FILTERSIZES:\n            self._filter = _BME680_FILTERSIZES[size]\n        else:\n            raise RuntimeError(\"Invalid size\")\n\n    @property\n    def temperature(self):\n        \"\"\"The compensated temperature in degrees celsius.\"\"\"\n        self._perform_reading()\n        calc_temp = (((self._t_fine * 5) + 128) \/ 256)\n        return calc_temp \/ 100\n\n    @property\n    def pressure(self):\n        \"\"\"The barometric pressure in hectoPascals\"\"\"\n        self._perform_reading()\n        var1 = (self._t_fine \/ 2) - 64000\n        var2 = ((var1 \/ 4) * (var1 \/ 4)) \/ 2048\n        var2 = (var2 * self._pressure_calibration[5]) \/ 4\n        var2 = var2 + (var1 * self._pressure_calibration[4] * 2)\n        var2 = (var2 \/ 4) + (self._pressure_calibration[3] * 65536)\n        var1 = (((((var1 \/ 4) * (var1 \/ 4)) \/ 8192) *\n                (self._pressure_calibration[2] * 32) \/ 8) +\n                ((self._pressure_calibration[1] * var1) \/ 2))\n        var1 = var1 \/ 262144\n        var1 = ((32768 + var1) * self._pressure_calibration[0]) \/ 32768\n        calc_pres = 1048576 - self._adc_pres\n        calc_pres = (calc_pres - (var2 \/ 4096)) * 3125\n        calc_pres = (calc_pres \/ var1) * 2\n        var1 = (self._pressure_calibration[8] * (((calc_pres \/ 8) * (calc_pres \/ 8)) \/ 8192)) \/ 4096\n        var2 = ((calc_pres \/ 4) * self._pressure_calibration[7]) \/ 8192\n        var3 = (((calc_pres \/ 256) ** 3) * self._pressure_calibration[9]) \/ 131072\n        calc_pres += ((var1 + var2 + var3 + (self._pressure_calibration[6] * 128)) \/ 16)\n        return calc_pres\/100\n\n    @property\n    def humidity(self):\n        \"\"\"The relative humidity in RH %\"\"\"\n        self._perform_reading()\n        temp_scaled = ((self._t_fine * 5) + 128) \/ 256\n        var1 = ((self._adc_hum - (self._humidity_calibration[0] * 16)) -\n                ((temp_scaled * self._humidity_calibration[2]) \/ 200))\n        var2 = (self._humidity_calibration[1] *\n                (((temp_scaled * self._humidity_calibration[3]) \/ 100) +\n                 (((temp_scaled * ((temp_scaled * self._humidity_calibration[4]) \/ 100)) \/\n                   64) \/ 100) + 16384)) \/ 1024\n        var3 = var1 * var2\n        var4 = self._humidity_calibration[5] * 128\n        var4 = (var4 + ((temp_scaled * self._humidity_calibration[6]) \/ 100)) \/ 16\n        var5 = ((var3 \/ 16384) * (var3 \/ 16384)) \/ 1024\n        var6 = (var4 * var5) \/ 2\n        calc_hum = (((var3 + var6) \/ 1024) * 1000) \/ 4096\n        calc_hum \/= 1000  # get back to RH\n\n        if calc_hum &gt; 100:\n            calc_hum = 100\n        if calc_hum &lt; 0:\n            calc_hum = 0\n        return calc_hum\n\n    @property\n    def altitude(self):\n        \"\"\"The altitude based on current ``pressure`` vs the sea level pressure\n           (``sea_level_pressure``) - which you must enter ahead of time)\"\"\"\n        pressure = self.pressure # in Si units for hPascal\n        return 44330 * (1.0 - math.pow(pressure \/ self.sea_level_pressure, 0.1903))\n\n    @property\n    def gas(self):\n        \"\"\"The gas resistance in ohms\"\"\"\n        self._perform_reading()\n        var1 = ((1340 + (5 * self._sw_err)) * (_LOOKUP_TABLE_1[self._gas_range])) \/ 65536\n        var2 = ((self._adc_gas * 32768) - 16777216) + var1\n        var3 = (_LOOKUP_TABLE_2[self._gas_range] * var1) \/ 512\n        calc_gas_res = (var3 + (var2 \/ 2)) \/ var2\n        return int(calc_gas_res)\n\n    def _perform_reading(self):\n        \"\"\"Perform a single-shot reading from the sensor and fill internal data structure for\n           calculations\"\"\"\n        if (time.ticks_diff(self._last_reading, time.ticks_ms()) * time.ticks_diff(0, 1)\n                &lt; self._min_refresh_time):\n            return\n\n        # set filter\n        self._write(_BME680_REG_CONFIG, [self._filter &lt;&lt; 2])\n        # turn on temp oversample &amp; pressure oversample\n        self._write(_BME680_REG_CTRL_MEAS,\n                    [(self._temp_oversample &lt;&lt; 5)|(self._pressure_oversample &lt;&lt; 2)])\n        # turn on humidity oversample\n        self._write(_BME680_REG_CTRL_HUM, [self._humidity_oversample])\n        # gas measurements enabled\n        self._write(_BME680_REG_CTRL_GAS, [_BME680_RUNGAS])\n\n        ctrl = self._read_byte(_BME680_REG_CTRL_MEAS)\n        ctrl = (ctrl &amp; 0xFC) | 0x01  # enable single shot!\n        self._write(_BME680_REG_CTRL_MEAS, [ctrl])\n        new_data = False\n        while not new_data:\n            data = self._read(_BME680_REG_MEAS_STATUS, 15)\n            new_data = data[0] &amp; 0x80 != 0\n            time.sleep(0.005)\n        self._last_reading = time.ticks_ms()\n\n        self._adc_pres = _read24(data[2:5]) \/ 16\n        self._adc_temp = _read24(data[5:8]) \/ 16\n        self._adc_hum = struct.unpack('&gt;H', bytes(data[8:10]))[0]\n        self._adc_gas = int(struct.unpack('&gt;H', bytes(data[13:15]))[0] \/ 64)\n        self._gas_range = data[14] &amp; 0x0F\n\n        var1 = (self._adc_temp \/ 8) - (self._temp_calibration[0] * 2)\n        var2 = (var1 * self._temp_calibration[1]) \/ 2048\n        var3 = ((var1 \/ 2) * (var1 \/ 2)) \/ 4096\n        var3 = (var3 * self._temp_calibration[2] * 16) \/ 16384\n\n        self._t_fine = int(var2 + var3)\n\n    def _read_calibration(self):\n        \"\"\"Read &amp; save the calibration coefficients\"\"\"\n        coeff = self._read(_BME680_BME680_COEFF_ADDR1, 25)\n        coeff += self._read(_BME680_BME680_COEFF_ADDR2, 16)\n\n        coeff = list(struct.unpack('&lt;hbBHhbBhhbbHhhBBBHbbbBbHhbb', bytes(coeff[1:39])))\n        # print(\"\\n\\n\",coeff)\n        coeff = [float(i) for i in coeff]\n        self._temp_calibration = [coeff[x] for x in [23, 0, 1]]\n        self._pressure_calibration = [coeff[x] for x in [3, 4, 5, 7, 8, 10, 9, 12, 13, 14]]\n        self._humidity_calibration = [coeff[x] for x in [17, 16, 18, 19, 20, 21, 22]]\n        self._gas_calibration = [coeff[x] for x in [25, 24, 26]]\n\n        # flip around H1 &amp; H2\n        self._humidity_calibration[1] *= 16\n        self._humidity_calibration[1] += self._humidity_calibration[0] % 16\n        self._humidity_calibration[0] \/= 16\n\n        self._heat_range = (self._read_byte(0x02) &amp; 0x30) \/ 16\n        self._heat_val = self._read_byte(0x00)\n        self._sw_err = (self._read_byte(0x04) &amp; 0xF0) \/ 16\n\n    def _read_byte(self, register):\n        \"\"\"Read a byte register value and return it\"\"\"\n        return self._read(register, 1)[0]\n\n    def _read(self, register, length):\n        raise NotImplementedError()\n\n    def _write(self, register, values):\n        raise NotImplementedError()\n\nclass BME680_I2C(Adafruit_BME680):\n    \"\"\"Driver for I2C connected BME680.\n\n        :param i2c: I2C device object\n        :param int address: I2C device address\n        :param bool debug: Print debug statements when True.\n        :param int refresh_rate: Maximum number of readings per second. Faster property reads\n          will be from the previous reading.\"\"\"\n    def __init__(self, i2c, address=0x77, debug=False, *, refresh_rate=10):\n        \"\"\"Initialize the I2C device at the 'address' given\"\"\"\n        self._i2c = i2c\n        self._address = address\n        self._debug = debug\n        super().__init__(refresh_rate=refresh_rate)\n\n    def _read(self, register, length):\n        \"\"\"Returns an array of 'length' bytes from the 'register'\"\"\"\n        result = bytearray(length)\n        self._i2c.readfrom_mem_into(self._address, register &amp; 0xff, result)\n        if self._debug:\n            print(\"\\t${:x} read \".format(register), \" \".join([\"{:02x}\".format(i) for i in result]))\n        return result\n\n    def _write(self, register, values):\n        \"\"\"Writes an array of 'length' bytes to the 'register'\"\"\"\n        if self._debug:\n            print(\"\\t${:x} write\".format(register), \" \".join([\"{:02x}\".format(i) for i in values]))\n        for value in values:\n            self._i2c.writeto_mem(self._address, register, bytearray([value &amp; 0xFF]))\n            register += 1\n\n\nclass BME680_SPI(Adafruit_BME680):\n    \"\"\"Driver for SPI connected BME680.\n\n        :param spi: SPI device object, configured\n        :param cs: Chip Select Pin object, configured to OUT mode\n        :param bool debug: Print debug statements when True.\n        :param int refresh_rate: Maximum number of readings per second. Faster property reads\n          will be from the previous reading.\n      \"\"\"\n\n    def __init__(self, spi, cs, debug=False, *, refresh_rate=10):\n        self._spi = spi\n        self._cs = cs\n        self._debug = debug\n        self._cs(1)\n        super().__init__(refresh_rate=refresh_rate)\n\n    def _read(self, register, length):\n        if register != _BME680_REG_PAGE_SELECT:\n            # _BME680_REG_PAGE_SELECT exists in both SPI memory pages\n            # For all other registers, we must set the correct memory page\n            self._set_spi_mem_page(register)\n        register = (register | 0x80) &amp; 0xFF  # Read single, bit 7 high.\n\n        try:\n            self._cs(0)\n            self._spi.write(bytearray([register]))  # pylint: disable=no-member\n            result = bytearray(length)\n            self._spi.readinto(result)  # pylint: disable=no-member\n            if self._debug:\n                print(\"\\t${:x} read \".format(register), \" \".join([\"{:02x}\".format(i) for i in result]))\n        except Exception as e:\n            print (e)\n            result = None\n        finally:\n            self._cs(1)\n        return result\n\n    def _write(self, register, values):\n        if register != _BME680_REG_PAGE_SELECT:\n            # _BME680_REG_PAGE_SELECT exists in both SPI memory pages\n            # For all other registers, we must set the correct memory page\n            self._set_spi_mem_page(register)\n        register &amp;= 0x7F  # Write, bit 7 low.\n        try:\n            self._cs(0)\n            buffer = bytearray(2 * len(values))\n            for i, value in enumerate(values):\n                buffer[2 * i] = register + i\n                buffer[2 * i + 1] = value &amp; 0xFF\n            self._spi.write(buffer)  # pylint: disable=no-member\n            if self._debug:\n                print(\"\\t${:x} write\".format(register), \" \".join([\"{:02x}\".format(i) for i in values]))\n        except Exception as e:\n            print (e)\n        finally:\n            self._cs(1)\n\n    def _set_spi_mem_page(self, register):\n        spi_mem_page = 0x00\n        if register &lt; 0x80:\n            spi_mem_page = 0x10\n        self._write(_BME680_REG_PAGE_SELECT, [spi_mem_page])\n<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u7528\u3044\u307e\u3059\u3068\u7c21\u5358\u306b\u6e2c\u5b9a\u3067\u304d\u307e\u3059\u3002Adafruit\u3067\u7528\u610f\u3057\u3066\u3044\u308b\u30c6\u30b9\u30c8\u7528\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u4f7f\u7528\u3057\u3001\u6bce\u5ea6\u306e\u30d7\u30eb\u30a2\u30c3\u30d7\u3092\u30bd\u30d5\u30c8\u7684\u306b\u884c\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:python decode:true \" title=\"bmetest.py\">from bme680 import *\nfrom machine import I2C, Pin\nimport time\np21 = Pin(21, Pin.IN, Pin.PULL_UP)\np23 = Pin(23, Pin.IN, Pin.PULL_UP)\nbme = BME680_I2C(I2C(-1, Pin(21), Pin(23)))\n\nfor _ in range(3):\n    print(bme.temperature, bme.humidity, bme.pressure, bme.gas)\n    time.sleep(1)\n<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u3042\u3063\u3068\u3044\u3046\u9593\u306b\u51fa\u6765\u4e0a\u304c\u308a\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>C:\\Users\\&gt;ampy -p com3 run c:\\micropython\\bmetest.py\nWarning: I2C(-1, ...) is deprecated, use SoftI2C(...) instead\n15.30285 45.3333 1031.108 269211\n15.31457 45.40735 1031.111 116460\n15.33859 45.47064 1031.105 124723<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u6b21\u56de\u306f\u3053\u308c\u3092\u7528\u3044\u3066\u3001DB\u306b\u3064\u306a\u304e\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5148\u65e5\u304a\u77e5\u3089\u305b\u3057\u305fBME680\u306b\u3088\u308b\u6e29\u6e7f\u5ea6\u6c17\u5727\u3001\u30ac\u30b9\u6fc3\u5ea6\u306e\u5206\u6790\u3067\u3059\u3002 \u4eca\u56de\u306f\u79cb\u6708\u96fb\u5b50\u306e\u30bb\u30f3\u30b5\u3092\u7528\u3044\u3066\u3044\u307e\u3059\u304c\u3001\u540c\u3058\u3088\u3046\u306bAdafruit\u3067\u3082\u540c\u69d8\u306e\u30bb\u30f3\u30b5\u30ad\u30c3\u30c8\u3092\u7528\u610f\u3057\u3066\u304a\u308a\u3001Github\u306b\u3066MicroPython\u7528\u306b\u7528\u610f\u3055 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/sakae-shokai.com\/wordpress\/?p=366\" class=\"more-link\"><span class=\"screen-reader-text\">&#8220;ESP32 \u8907\u5408\u30bb\u30f3\u30b5BME680&#8221; \u306e<\/span>\u7d9a\u304d\u3092\u8aad\u3080<\/a><\/p>\n","protected":false},"author":1,"featured_media":234,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17,16,20],"tags":[46,18,19],"class_list":["post-366","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-esp32","category-micropython","category-python","tag-bme680","tag-esp32","tag-micropython"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u5148\u65e5\u304a\u77e5\u3089\u305b\u3057\u305fBME680\u306b\u3088\u308b\u6e29\u6e7f\u5ea6\u6c17\u5727\u3001\u30ac\u30b9\u6fc3\u5ea6\u306e\u5206\u6790\u3067\u3059\u3002 \u4eca\u56de\u306f\u79cb\u6708\u96fb\u5b50\u306e\u30bb\u30f3\u30b5\u3092\u7528\u3044\u3066\u3044\u307e\u3059\u304c\u3001\u540c\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"sakae\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/sakae-shokai.com\/wordpress\/?p=366\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"ja_JP\" \/>\n\t\t<meta property=\"og:site_name\" content=\"\u6804\u5546\u4f1a - \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30ab\u30e1\u30e9\u306e\u69cb\u7bc9\u3001\u4e2d\u53e4\u4e8c\u8f2a\u8eca\u306e\u8cb7\u53d6\uff0f\u8ca9\u58f2\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"ESP32 \u8907\u5408\u30bb\u30f3\u30b5BME680 - \u6804\u5546\u4f1a\" \/>\n\t\t<meta property=\"og:description\" content=\"\u5148\u65e5\u304a\u77e5\u3089\u305b\u3057\u305fBME680\u306b\u3088\u308b\u6e29\u6e7f\u5ea6\u6c17\u5727\u3001\u30ac\u30b9\u6fc3\u5ea6\u306e\u5206\u6790\u3067\u3059\u3002 \u4eca\u56de\u306f\u79cb\u6708\u96fb\u5b50\u306e\u30bb\u30f3\u30b5\u3092\u7528\u3044\u3066\u3044\u307e\u3059\u304c\u3001\u540c\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/sakae-shokai.com\/wordpress\/?p=366\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2021-03-01T11:07:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2021-03-01T09:09:23+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"ESP32 \u8907\u5408\u30bb\u30f3\u30b5BME680 - \u6804\u5546\u4f1a\" \/>\n\t\t<meta name=\"twitter:description\" content=\"\u5148\u65e5\u304a\u77e5\u3089\u305b\u3057\u305fBME680\u306b\u3088\u308b\u6e29\u6e7f\u5ea6\u6c17\u5727\u3001\u30ac\u30b9\u6fc3\u5ea6\u306e\u5206\u6790\u3067\u3059\u3002 \u4eca\u56de\u306f\u79cb\u6708\u96fb\u5b50\u306e\u30bb\u30f3\u30b5\u3092\u7528\u3044\u3066\u3044\u307e\u3059\u304c\u3001\u540c\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?p=366#blogposting\",\"name\":\"ESP32 \\u8907\\u5408\\u30bb\\u30f3\\u30b5BME680 - \\u6804\\u5546\\u4f1a\",\"headline\":\"ESP32 \\u8907\\u5408\\u30bb\\u30f3\\u30b5BME680\",\"author\":{\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?author=1#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/D073A08E-B5D9-40B9-978B-E7977F603ACB-scaled.jpeg\",\"width\":1080,\"height\":1920},\"datePublished\":\"2021-03-01T20:07:00+09:00\",\"dateModified\":\"2021-03-01T18:09:23+09:00\",\"inLanguage\":\"ja\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?p=366#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?p=366#webpage\"},\"articleSection\":\"ESP32, MicroPython, Python, BME680, ESP32, microPython\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?p=366#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress#listItem\",\"position\":1,\"name\":\"\\u30db\\u30fc\\u30e0\",\"item\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?cat=15#listItem\",\"name\":\"\\u30d7\\u30ed\\u30b0\\u30e9\\u30e0\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?cat=15#listItem\",\"position\":2,\"name\":\"\\u30d7\\u30ed\\u30b0\\u30e9\\u30e0\",\"item\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?cat=15\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?cat=16#listItem\",\"name\":\"MicroPython\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress#listItem\",\"name\":\"\\u30db\\u30fc\\u30e0\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?cat=16#listItem\",\"position\":3,\"name\":\"MicroPython\",\"item\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?cat=16\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?p=366#listItem\",\"name\":\"ESP32 \\u8907\\u5408\\u30bb\\u30f3\\u30b5BME680\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?cat=15#listItem\",\"name\":\"\\u30d7\\u30ed\\u30b0\\u30e9\\u30e0\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?p=366#listItem\",\"position\":4,\"name\":\"ESP32 \\u8907\\u5408\\u30bb\\u30f3\\u30b5BME680\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?cat=16#listItem\",\"name\":\"MicroPython\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/#organization\",\"name\":\"\\u6804\\u5546\\u4f1a\",\"description\":\"\\u30cd\\u30c3\\u30c8\\u30ef\\u30fc\\u30af\\u30ab\\u30e1\\u30e9\\u306e\\u69cb\\u7bc9\\u3001\\u4e2d\\u53e4\\u4e8c\\u8f2a\\u8eca\\u306e\\u8cb7\\u53d6\\uff0f\\u8ca9\\u58f2\",\"url\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/\",\"telephone\":\"+818012056039\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/tori.jpg\",\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?p=366\\\/#organizationLogo\",\"width\":110,\"height\":110},\"image\":{\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?p=366\\\/#organizationLogo\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?author=1#author\",\"url\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?author=1\",\"name\":\"sakae\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?p=366#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c05e9048726ffb005a982d57828a8d6a1c551b54bf44fc22b30e05eaa62ca05d?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"sakae\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?p=366#webpage\",\"url\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?p=366\",\"name\":\"ESP32 \\u8907\\u5408\\u30bb\\u30f3\\u30b5BME680 - \\u6804\\u5546\\u4f1a\",\"description\":\"\\u5148\\u65e5\\u304a\\u77e5\\u3089\\u305b\\u3057\\u305fBME680\\u306b\\u3088\\u308b\\u6e29\\u6e7f\\u5ea6\\u6c17\\u5727\\u3001\\u30ac\\u30b9\\u6fc3\\u5ea6\\u306e\\u5206\\u6790\\u3067\\u3059\\u3002 \\u4eca\\u56de\\u306f\\u79cb\\u6708\\u96fb\\u5b50\\u306e\\u30bb\\u30f3\\u30b5\\u3092\\u7528\\u3044\\u3066\\u3044\\u307e\\u3059\\u304c\\u3001\\u540c\",\"inLanguage\":\"ja\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?p=366#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?author=1#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?author=1#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/D073A08E-B5D9-40B9-978B-E7977F603ACB-scaled.jpeg\",\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?p=366\\\/#mainImage\",\"width\":1080,\"height\":1920},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/?p=366#mainImage\"},\"datePublished\":\"2021-03-01T20:07:00+09:00\",\"dateModified\":\"2021-03-01T18:09:23+09:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/#website\",\"url\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/\",\"name\":\"\\u6804\\u5546\\u4f1a\",\"description\":\"\\u30cd\\u30c3\\u30c8\\u30ef\\u30fc\\u30af\\u30ab\\u30e1\\u30e9\\u306e\\u69cb\\u7bc9\\u3001\\u4e2d\\u53e4\\u4e8c\\u8f2a\\u8eca\\u306e\\u8cb7\\u53d6\\uff0f\\u8ca9\\u58f2\",\"inLanguage\":\"ja\",\"publisher\":{\"@id\":\"https:\\\/\\\/sakae-shokai.com\\\/wordpress\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"ESP32 \u8907\u5408\u30bb\u30f3\u30b5BME680 - \u6804\u5546\u4f1a","description":"\u5148\u65e5\u304a\u77e5\u3089\u305b\u3057\u305fBME680\u306b\u3088\u308b\u6e29\u6e7f\u5ea6\u6c17\u5727\u3001\u30ac\u30b9\u6fc3\u5ea6\u306e\u5206\u6790\u3067\u3059\u3002 \u4eca\u56de\u306f\u79cb\u6708\u96fb\u5b50\u306e\u30bb\u30f3\u30b5\u3092\u7528\u3044\u3066\u3044\u307e\u3059\u304c\u3001\u540c","canonical_url":"https:\/\/sakae-shokai.com\/wordpress\/?p=366","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/sakae-shokai.com\/wordpress\/?p=366#blogposting","name":"ESP32 \u8907\u5408\u30bb\u30f3\u30b5BME680 - \u6804\u5546\u4f1a","headline":"ESP32 \u8907\u5408\u30bb\u30f3\u30b5BME680","author":{"@id":"https:\/\/sakae-shokai.com\/wordpress\/?author=1#author"},"publisher":{"@id":"https:\/\/sakae-shokai.com\/wordpress\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/sakae-shokai.com\/wordpress\/wp-content\/uploads\/2021\/02\/D073A08E-B5D9-40B9-978B-E7977F603ACB-scaled.jpeg","width":1080,"height":1920},"datePublished":"2021-03-01T20:07:00+09:00","dateModified":"2021-03-01T18:09:23+09:00","inLanguage":"ja","mainEntityOfPage":{"@id":"https:\/\/sakae-shokai.com\/wordpress\/?p=366#webpage"},"isPartOf":{"@id":"https:\/\/sakae-shokai.com\/wordpress\/?p=366#webpage"},"articleSection":"ESP32, MicroPython, Python, BME680, ESP32, microPython"},{"@type":"BreadcrumbList","@id":"https:\/\/sakae-shokai.com\/wordpress\/?p=366#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/sakae-shokai.com\/wordpress#listItem","position":1,"name":"\u30db\u30fc\u30e0","item":"https:\/\/sakae-shokai.com\/wordpress","nextItem":{"@type":"ListItem","@id":"https:\/\/sakae-shokai.com\/wordpress\/?cat=15#listItem","name":"\u30d7\u30ed\u30b0\u30e9\u30e0"}},{"@type":"ListItem","@id":"https:\/\/sakae-shokai.com\/wordpress\/?cat=15#listItem","position":2,"name":"\u30d7\u30ed\u30b0\u30e9\u30e0","item":"https:\/\/sakae-shokai.com\/wordpress\/?cat=15","nextItem":{"@type":"ListItem","@id":"https:\/\/sakae-shokai.com\/wordpress\/?cat=16#listItem","name":"MicroPython"},"previousItem":{"@type":"ListItem","@id":"https:\/\/sakae-shokai.com\/wordpress#listItem","name":"\u30db\u30fc\u30e0"}},{"@type":"ListItem","@id":"https:\/\/sakae-shokai.com\/wordpress\/?cat=16#listItem","position":3,"name":"MicroPython","item":"https:\/\/sakae-shokai.com\/wordpress\/?cat=16","nextItem":{"@type":"ListItem","@id":"https:\/\/sakae-shokai.com\/wordpress\/?p=366#listItem","name":"ESP32 \u8907\u5408\u30bb\u30f3\u30b5BME680"},"previousItem":{"@type":"ListItem","@id":"https:\/\/sakae-shokai.com\/wordpress\/?cat=15#listItem","name":"\u30d7\u30ed\u30b0\u30e9\u30e0"}},{"@type":"ListItem","@id":"https:\/\/sakae-shokai.com\/wordpress\/?p=366#listItem","position":4,"name":"ESP32 \u8907\u5408\u30bb\u30f3\u30b5BME680","previousItem":{"@type":"ListItem","@id":"https:\/\/sakae-shokai.com\/wordpress\/?cat=16#listItem","name":"MicroPython"}}]},{"@type":"Organization","@id":"https:\/\/sakae-shokai.com\/wordpress\/#organization","name":"\u6804\u5546\u4f1a","description":"\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30ab\u30e1\u30e9\u306e\u69cb\u7bc9\u3001\u4e2d\u53e4\u4e8c\u8f2a\u8eca\u306e\u8cb7\u53d6\uff0f\u8ca9\u58f2","url":"https:\/\/sakae-shokai.com\/wordpress\/","telephone":"+818012056039","logo":{"@type":"ImageObject","url":"https:\/\/sakae-shokai.com\/wordpress\/wp-content\/uploads\/2021\/02\/tori.jpg","@id":"https:\/\/sakae-shokai.com\/wordpress\/?p=366\/#organizationLogo","width":110,"height":110},"image":{"@id":"https:\/\/sakae-shokai.com\/wordpress\/?p=366\/#organizationLogo"}},{"@type":"Person","@id":"https:\/\/sakae-shokai.com\/wordpress\/?author=1#author","url":"https:\/\/sakae-shokai.com\/wordpress\/?author=1","name":"sakae","image":{"@type":"ImageObject","@id":"https:\/\/sakae-shokai.com\/wordpress\/?p=366#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/c05e9048726ffb005a982d57828a8d6a1c551b54bf44fc22b30e05eaa62ca05d?s=96&d=mm&r=g","width":96,"height":96,"caption":"sakae"}},{"@type":"WebPage","@id":"https:\/\/sakae-shokai.com\/wordpress\/?p=366#webpage","url":"https:\/\/sakae-shokai.com\/wordpress\/?p=366","name":"ESP32 \u8907\u5408\u30bb\u30f3\u30b5BME680 - \u6804\u5546\u4f1a","description":"\u5148\u65e5\u304a\u77e5\u3089\u305b\u3057\u305fBME680\u306b\u3088\u308b\u6e29\u6e7f\u5ea6\u6c17\u5727\u3001\u30ac\u30b9\u6fc3\u5ea6\u306e\u5206\u6790\u3067\u3059\u3002 \u4eca\u56de\u306f\u79cb\u6708\u96fb\u5b50\u306e\u30bb\u30f3\u30b5\u3092\u7528\u3044\u3066\u3044\u307e\u3059\u304c\u3001\u540c","inLanguage":"ja","isPartOf":{"@id":"https:\/\/sakae-shokai.com\/wordpress\/#website"},"breadcrumb":{"@id":"https:\/\/sakae-shokai.com\/wordpress\/?p=366#breadcrumblist"},"author":{"@id":"https:\/\/sakae-shokai.com\/wordpress\/?author=1#author"},"creator":{"@id":"https:\/\/sakae-shokai.com\/wordpress\/?author=1#author"},"image":{"@type":"ImageObject","url":"https:\/\/sakae-shokai.com\/wordpress\/wp-content\/uploads\/2021\/02\/D073A08E-B5D9-40B9-978B-E7977F603ACB-scaled.jpeg","@id":"https:\/\/sakae-shokai.com\/wordpress\/?p=366\/#mainImage","width":1080,"height":1920},"primaryImageOfPage":{"@id":"https:\/\/sakae-shokai.com\/wordpress\/?p=366#mainImage"},"datePublished":"2021-03-01T20:07:00+09:00","dateModified":"2021-03-01T18:09:23+09:00"},{"@type":"WebSite","@id":"https:\/\/sakae-shokai.com\/wordpress\/#website","url":"https:\/\/sakae-shokai.com\/wordpress\/","name":"\u6804\u5546\u4f1a","description":"\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30ab\u30e1\u30e9\u306e\u69cb\u7bc9\u3001\u4e2d\u53e4\u4e8c\u8f2a\u8eca\u306e\u8cb7\u53d6\uff0f\u8ca9\u58f2","inLanguage":"ja","publisher":{"@id":"https:\/\/sakae-shokai.com\/wordpress\/#organization"}}]},"og:locale":"ja_JP","og:site_name":"\u6804\u5546\u4f1a - \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30ab\u30e1\u30e9\u306e\u69cb\u7bc9\u3001\u4e2d\u53e4\u4e8c\u8f2a\u8eca\u306e\u8cb7\u53d6\uff0f\u8ca9\u58f2","og:type":"article","og:title":"ESP32 \u8907\u5408\u30bb\u30f3\u30b5BME680 - \u6804\u5546\u4f1a","og:description":"\u5148\u65e5\u304a\u77e5\u3089\u305b\u3057\u305fBME680\u306b\u3088\u308b\u6e29\u6e7f\u5ea6\u6c17\u5727\u3001\u30ac\u30b9\u6fc3\u5ea6\u306e\u5206\u6790\u3067\u3059\u3002 \u4eca\u56de\u306f\u79cb\u6708\u96fb\u5b50\u306e\u30bb\u30f3\u30b5\u3092\u7528\u3044\u3066\u3044\u307e\u3059\u304c\u3001\u540c","og:url":"https:\/\/sakae-shokai.com\/wordpress\/?p=366","article:published_time":"2021-03-01T11:07:00+00:00","article:modified_time":"2021-03-01T09:09:23+00:00","twitter:card":"summary","twitter:title":"ESP32 \u8907\u5408\u30bb\u30f3\u30b5BME680 - \u6804\u5546\u4f1a","twitter:description":"\u5148\u65e5\u304a\u77e5\u3089\u305b\u3057\u305fBME680\u306b\u3088\u308b\u6e29\u6e7f\u5ea6\u6c17\u5727\u3001\u30ac\u30b9\u6fc3\u5ea6\u306e\u5206\u6790\u3067\u3059\u3002 \u4eca\u56de\u306f\u79cb\u6708\u96fb\u5b50\u306e\u30bb\u30f3\u30b5\u3092\u7528\u3044\u3066\u3044\u307e\u3059\u304c\u3001\u540c"},"aioseo_meta_data":{"post_id":"366","title":"#post_title #separator_sa #site_title","description":"#post_content","keywords":[],"keyphrases":{"focus":[],"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":[],"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[],"defaultGraph":"Article","defaultPostTypeGraph":""},"schema_type":"default","schema_type_options":"{\"article\":{\"articleType\":\"BlogPosting\"},\"course\":{\"name\":\"\",\"description\":\"\",\"provider\":\"\"},\"faq\":{\"pages\":[]},\"product\":{\"reviews\":[]},\"recipe\":{\"ingredients\":[],\"instructions\":[],\"keywords\":[]},\"software\":{\"reviews\":[],\"operatingSystems\":[]},\"webPage\":{\"webPageType\":\"WebPage\"}}","pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","location":null,"local_seo":{"businessInfo":{"name":"","urls":{"website":"","aboutPage":"","contactPage":""},"address":{"line1":"","line2":"","zip":"","city":"","state":"","country":""},"contact":{"email":"","phone":"","fax":""},"ids":{"vatID":"","taxID":"","chamberID":""},"payment":{"priceIndication":"","currenciesAccepted":"","methodsAccepted":""},"areaServed":""},"openingHours":{"show":false,"closedLabel":"","open24h":false,"open24hLabel":"","open247":false,"use24hFormat":false,"twoSets":false,"timezone":"","hours":[]}},"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2021-02-28 10:26:18","updated":"2025-06-04 03:19:51","seo_analyzer_scan_date":null},"_links":{"self":[{"href":"https:\/\/sakae-shokai.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/366","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sakae-shokai.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sakae-shokai.com\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sakae-shokai.com\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sakae-shokai.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=366"}],"version-history":[{"count":2,"href":"https:\/\/sakae-shokai.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/366\/revisions"}],"predecessor-version":[{"id":372,"href":"https:\/\/sakae-shokai.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/366\/revisions\/372"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sakae-shokai.com\/wordpress\/index.php?rest_route=\/wp\/v2\/media\/234"}],"wp:attachment":[{"href":"https:\/\/sakae-shokai.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=366"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sakae-shokai.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=366"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sakae-shokai.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}