{"id":318,"date":"2021-08-09T21:10:55","date_gmt":"2021-08-09T12:10:55","guid":{"rendered":"https:\/\/rfsec.ddns.net\/db\/?p=318"},"modified":"2021-08-09T22:27:06","modified_gmt":"2021-08-09T13:27:06","slug":"mpu9250%e3%82%92raspi%e3%81%a7%e5%88%a9%e7%94%a8%e3%81%99%e3%82%8b%e3%80%82","status":"publish","type":"post","link":"https:\/\/rfsec.ddns.net\/db\/?p=318","title":{"rendered":"MPU9250\u3092raspi\u3067\u5229\u7528\u3059\u308b\u3002"},"content":{"rendered":"\n<p>\uff08BMP280\u306e\u30c1\u30c3\u30d7\u3082\u642d\u8f09\u3055\u308c\u3066\u3044\u308bMPU9250\uff09<\/p>\n\n\n\n<p><strong>\u624b\u9806<\/strong><\/p>\n\n\n\n<p>(1)raspberry pi\u306eGPIO\u8a2d\u5b9a\u3067I2C\u3092\u6709\u52b9\u5316\uff08<a href=\"https:\/\/www.indoorcorgielec.com\/resources\/raspberry-pi\/raspberry-pi-i2c\/\" data-type=\"URL\" data-id=\"https:\/\/www.indoorcorgielec.com\/resources\/raspberry-pi\/raspberry-pi-i2c\/\">\u53c2\u8003URL https:\/\/www.indoorcorgielec.com\/resources\/raspberry-pi\/raspberry-pi-i2c\/<\/a>\uff09<\/p>\n\n\n\n<p>(2) raspberry pi \u3078i2c-tools\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>$sudo apt install i2c-tools<\/code><\/pre><\/div>\n\n\n\n<p>raspberry pi\u3068\uff14\u672c\u306e\u7dda\uff083.3V,SDA,SCL,GND\uff09\u3067MPU9250\u3092\u63a5\u7d9a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/rfsec.ddns.net\/db\/wp-content\/uploads\/2021\/08\/mpu9250-815x1024.jpg\" alt=\"\" class=\"wp-image-319\" width=\"365\" height=\"458\" srcset=\"https:\/\/rfsec.ddns.net\/db\/wp-content\/uploads\/2021\/08\/mpu9250-815x1024.jpg 815w, https:\/\/rfsec.ddns.net\/db\/wp-content\/uploads\/2021\/08\/mpu9250-239x300.jpg 239w, https:\/\/rfsec.ddns.net\/db\/wp-content\/uploads\/2021\/08\/mpu9250-768x965.jpg 768w, https:\/\/rfsec.ddns.net\/db\/wp-content\/uploads\/2021\/08\/mpu9250-1222x1536.jpg 1222w, https:\/\/rfsec.ddns.net\/db\/wp-content\/uploads\/2021\/08\/mpu9250-1630x2048.jpg 1630w, https:\/\/rfsec.ddns.net\/db\/wp-content\/uploads\/2021\/08\/mpu9250-624x784.jpg 624w, https:\/\/rfsec.ddns.net\/db\/wp-content\/uploads\/2021\/08\/mpu9250-scaled.jpg 2037w\" sizes=\"auto, (max-width: 365px) 100vw, 365px\" \/><\/figure>\n\n\n\n<p><strong>raspi\u306ePIN 1\/3\/5\/9(3.3V, SDA, SCL, GND)\u3078\u30bb\u30f3\u30b5\u30fc\u3092\u63a5\u7d9a<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"452\" height=\"394\" src=\"https:\/\/rfsec.ddns.net\/db\/wp-content\/uploads\/2021\/08\/raspberrypi-pinout-40-1-1.png\" alt=\"\" class=\"wp-image-322\" srcset=\"https:\/\/rfsec.ddns.net\/db\/wp-content\/uploads\/2021\/08\/raspberrypi-pinout-40-1-1.png 452w, https:\/\/rfsec.ddns.net\/db\/wp-content\/uploads\/2021\/08\/raspberrypi-pinout-40-1-1-300x262.png 300w\" sizes=\"auto, (max-width: 452px) 100vw, 452px\" \/><\/figure>\n\n\n\n<p><strong>i2cdetect<\/strong>\u30b3\u30de\u30f3\u30c9\u3067\u63a5\u7d9a\u3092\u78ba\u8a8d\u3059\u308b<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>$ i2cdetect -y 1\n     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f\n00:          -- -- -- -- -- -- -- -- -- -- -- -- --\n10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --\n20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --\n30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --\n40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --\n50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --\n60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --\n70: -- -- -- -- -- -- 76 --\n\n\u203b\u30000x68\u304cMPU9250\u306e\u30a2\u30c9\u30ec\u30b9\n\u203b\u30000x76\u304cBMP280\u306eI2C\u30a2\u30c9\u30ec\u30b9\n<\/code><\/pre><\/div>\n\n\n\n<p>\u5b9f\u884c\u4f8b\uff1abmp280.py   \u51fa\u529b\uff1a \u6c17\u5727\u3001\u6e29\u5ea6\u3001\u6e7f\u5ea6\uff08BMP280\u3067\u306f\u30c7\u30fc\u30bf\u7121\u3057\uff09<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code> $ python -V\nPython 3.7.3\n\n$ python bmp280.py\n 982.60,31.66,0.00<\/code><\/pre><\/div>\n\n\n\n<p>\u30bb\u30f3\u30b5\u30fc\u304b\u3089\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u51fa\u3059\u3002<a rel=\"noreferrer noopener\" href=\"https:\/\/deviceplus.jp\/hobby\/raspberrypi_entry_039\/\" data-type=\"URL\" data-id=\"https:\/\/deviceplus.jp\/hobby\/raspberrypi_entry_039\/\" target=\"_blank\">\u3053\u3061\u3089\u306epython\u30b3\u30fc\u30c9\u3092\u5229\u7528<\/a>\uff08\u8a18\u4e8b\u306fBME280\u306e\u30b3\u30fc\u30c9\u3067\u3059\u304c\u3001 BMP280 \u305d\u306e\u307e\u307e\u3067\u52d5\u304d\u307e\u3057\u305f\u3002\u305f\u3060\u3057\u3001\u6e7f\u5ea6\u306e\u30c7\u30fc\u30bf\u306f\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p><strong>bmp280.py<\/strong><\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-python\" data-lang=\"Python\"><code>#coding: utf-8\n\nimport smbus\nimport time\nbus_number  = 1\ni2c_address = 0x76\nbus = smbus.SMBus(bus_number)\ndigT = []\ndigP = []\ndigH = []\nt_fine = 0.0\n\ndef writeReg(reg_address, data):\n    bus.write_byte_data(i2c_address,reg_address,data)\n\ndef get_calib_param():\n    calib = []\n\n    for i in range (0x88,0x88+24):\n        calib.append(bus.read_byte_data(i2c_address,i))\n    calib.append(bus.read_byte_data(i2c_address,0xA1))\n    for i in range (0xE1,0xE1+7):\n        calib.append(bus.read_byte_data(i2c_address,i))\n\n    digT.append((calib[1] &lt;&lt; 8) | calib[0])\n    digT.append((calib[3] &lt;&lt; 8) | calib[2])\n    digT.append((calib[5] &lt;&lt; 8) | calib[4])\n    digP.append((calib[7] &lt;&lt; 8) | calib[6])\n    digP.append((calib[9] &lt;&lt; 8) | calib[8])\n    digP.append((calib[11]&lt;&lt; 8) | calib[10])\n    digP.append((calib[13]&lt;&lt; 8) | calib[12])\n    digP.append((calib[15]&lt;&lt; 8) | calib[14])\n    digP.append((calib[17]&lt;&lt; 8) | calib[16])\n    digP.append((calib[19]&lt;&lt; 8) | calib[18])\n    digP.append((calib[21]&lt;&lt; 8) | calib[20])\n    digP.append((calib[23]&lt;&lt; 8) | calib[22])\n    digH.append( calib[24] )\n    digH.append((calib[26]&lt;&lt; 8) | calib[25])\n    digH.append( calib[27] )\n    digH.append((calib[28]&lt;&lt; 4) | (0x0F & calib[29]))\n    digH.append((calib[30]&lt;&lt; 4) | ((calib[29] &gt;&gt; 4) & 0x0F))\n    digH.append( calib[31] )\n\n    for i in range(1,2):\n        if digT[i] & 0x8000:\n            digT[i] = (-digT[i] ^ 0xFFFF) + 1\n\n    for i in range(1,8):\n        if digP[i] & 0x8000:\n            digP[i] = (-digP[i] ^ 0xFFFF) + 1\n\n    for i in range(0,6):\n        if digH[i] & 0x8000:\n            digH[i] = (-digH[i] ^ 0xFFFF) + 1\n\ndef readData():\n    data = []\n    for i in range (0xF7, 0xF7+8):\n        data.append(bus.read_byte_data(i2c_address,i))\n    pres_raw = (data[0] &lt;&lt; 12) | (data[1] &lt;&lt; 4) | (data[2] &gt;&gt; 4)\n    temp_raw = (data[3] &lt;&lt; 12) | (data[4] &lt;&lt; 4) | (data[5] &gt;&gt; 4)\n    hum_raw  = (data[6] &lt;&lt; 8)  |  data[7]\n\n    #compensate_T(temp_raw)\n    #compensate_P(pres_raw)\n    #compensate_H(hum_raw)\n    t = compensate_T(temp_raw)\n    p = compensate_P(pres_raw)\n    h = compensate_H(hum_raw)\n    return p + &quot;,&quot; + t + &quot;,&quot; + h\n\ndef compensate_P(adc_P):\n    global  t_fine\n    pressure = 0.0\n\n    v1 = (t_fine \/ 2.0) - 64000.0\n    v2 = (((v1 \/ 4.0) * (v1 \/ 4.0)) \/ 2048) * digP[5]\n    v2 = v2 + ((v1 * digP[4]) * 2.0)\n    v2 = (v2 \/ 4.0) + (digP[3] * 65536.0)\n    v1 = (((digP[2] * (((v1 \/ 4.0) * (v1 \/ 4.0)) \/ 8192)) \/ 8)  + ((digP[1] * v1) \/ 2.0)) \/ 262144\n    v1 = ((32768 + v1) * digP[0]) \/ 32768\n\n    if v1 == 0:\n        return 0\n    pressure = ((1048576 - adc_P) - (v2 \/ 4096)) * 3125\n    if pressure &lt; 0x80000000:\n        pressure = (pressure * 2.0) \/ v1\n    else:\n        pressure = (pressure \/ v1) * 2\n    v1 = (digP[8] * (((pressure \/ 8.0) * (pressure \/ 8.0)) \/ 8192.0)) \/ 4096\n    v2 = ((pressure \/ 4.0) * digP[7]) \/ 8192.0\n    pressure = pressure + ((v1 + v2 + digP[6]) \/ 16.0)\n\n    #print &quot;pressure : %7.2f hPa&quot; % (pressure\/100)\n    return &quot;%7.2f&quot; % (pressure\/100)\n\ndef compensate_T(adc_T):\n    global t_fine\n    v1 = (adc_T \/ 16384.0 - digT[0] \/ 1024.0) * digT[1]\n    v2 = (adc_T \/ 131072.0 - digT[0] \/ 8192.0) * (adc_T \/ 131072.0 - digT[0] \/ 8192.0) * digT[2]\n    t_fine = v1 + v2\n    temperature = t_fine \/ 5120.0\n    #print &quot;temp : %-6.2f \u2103&quot; % (temperature)\n    return &quot;%.2f&quot; % (temperature)\n\ndef compensate_H(adc_H):\n    global t_fine\n    var_h = t_fine - 76800.0\n    if var_h != 0:\n        var_h = (adc_H - (digH[3] * 64.0 + digH[4]\/16384.0 * var_h)) * (digH[1] \/ 65536.0 * (1.0 + digH[5] \/ 67108864.0 * var_h * (1.0 + digH[2] \/ 67108864.0 * var_h)))\n    else:\n        return 0\n    var_h = var_h * (1.0 - digH[0] * var_h \/ 524288.0)\n    if var_h &gt; 100.0:\n        var_h = 100.0\n    elif var_h &lt; 0.0:\n        var_h = 0.0\n    #print &quot;hum : %6.2f \uff05&quot; % (var_h)\n    return &quot;%.2f&quot; % (var_h)\n\ndef setup():\n    osrs_t = 1            #Temperature oversampling x 1\n    osrs_p = 1            #Pressure oversampling x 1\n    osrs_h = 1            #Humidity oversampling x 1\n    mode   = 3            #Normal mode\n    t_sb   = 5            #Tstandby 1000ms\n    filter = 0            #Filter off\n    spi3w_en = 0            #3-wire SPI Disable\n\n    ctrl_meas_reg = (osrs_t &lt;&lt; 5) | (osrs_p &lt;&lt; 2) | mode\n    config_reg    = (t_sb &lt;&lt; 5) | (filter &lt;&lt; 2) | spi3w_en\n    ctrl_hum_reg  = osrs_h\n\n    writeReg(0xF2,ctrl_hum_reg)\n    writeReg(0xF4,ctrl_meas_reg)\n    writeReg(0xF5,config_reg)\n\nsetup()\nget_calib_param()\n\nif __name__ == &#39;__main__&#39;:\n    try:\n        print(readData())\n    except KeyboardInterrupt:\n        pass<\/code><\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\uff08BMP280\u306e\u30c1\u30c3\u30d7\u3082\u642d\u8f09\u3055\u308c\u3066\u3044\u308bMPU9250\uff09 \u624b\u9806 (1)raspberry pi\u306eGPIO\u8a2d\u5b9a\u3067I2C\u3092\u6709\u52b9\u5316\uff08\u53c2\u8003URL https:\/\/www.indoorcorgielec.com\/resources\/ [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-318","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"featured_image_src":null,"author_info":{"display_name":"mars","author_link":"https:\/\/rfsec.ddns.net\/db\/?author=1"},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/rfsec.ddns.net\/db\/index.php?rest_route=\/wp\/v2\/posts\/318","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rfsec.ddns.net\/db\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rfsec.ddns.net\/db\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rfsec.ddns.net\/db\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rfsec.ddns.net\/db\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=318"}],"version-history":[{"count":5,"href":"https:\/\/rfsec.ddns.net\/db\/index.php?rest_route=\/wp\/v2\/posts\/318\/revisions"}],"predecessor-version":[{"id":328,"href":"https:\/\/rfsec.ddns.net\/db\/index.php?rest_route=\/wp\/v2\/posts\/318\/revisions\/328"}],"wp:attachment":[{"href":"https:\/\/rfsec.ddns.net\/db\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=318"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rfsec.ddns.net\/db\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=318"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rfsec.ddns.net\/db\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=318"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}