{"id":59,"date":"2026-06-08T20:21:59","date_gmt":"2026-06-08T11:21:59","guid":{"rendered":"https:\/\/fideafact.ddns.net\/?p=59"},"modified":"2026-06-09T16:07:26","modified_gmt":"2026-06-09T07:07:26","slug":"dht22raspzw2%e3%81%ae%e6%b8%a9%e6%b9%bf%e5%ba%a6%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e3%80%81%e9%81%a0%e3%81%8f%e9%9b%a2%e3%82%8c%e3%81%9ffideafact-ddns-net%e3%81%ab%e9%80%81%e3%81%a3%e3%81%a6wordpre","status":"publish","type":"post","link":"https:\/\/fideafact.ddns.net\/?p=59","title":{"rendered":"DHT22+RaspZW2\u306e\u6e29\u6e7f\u5ea6\u30c7\u30fc\u30bf\u3092\u3001\u9060\u304f\u96e2\u308c\u305fFideafact.ddns.net\u306b\u9001\u3063\u3066WordPress\u3067\u30b0\u30e9\u30d5\u3067\u898b\u308b\u65b9\u6cd5\u3000Part1"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u76ee\u7684\u306f\u3001<strong>DHT22\u6e2c\u5b9a\u30fb\u9001\u4fe1\u3092\u5b89\u5b9a\u5316\u3057\u3001\u843d\u3061\u305f\u6642\u3084\u9001\u4fe1\u5931\u6557\u6642\u306b\u539f\u56e0\u3092\u8ffd\u3048\u308b\u3088\u3046\u306b\u3059\u308b\u3053\u3068<\/strong>\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-59f0694c097b4bcfbf20259561c6ff75 wp-block-paragraph\"><strong>1. dht22.py<\/strong><br>\/home\/pi\/script\/dht22.py<\/p>\n\n\n\n<pre class=\"wp-block-code has-vivid-red-color has-text-color has-link-color wp-elements-f8cd02ef44a86fdb04a33c3b29d20a1c\"><code>import time\nimport traceback\nimport os\nimport sys\nimport board\nimport adafruit_dht\nimport requests\n\nSERVER_URL = \"https:\/\/fideafact.ddns.net\/sensor\"\nINTERVAL = 600\nLOCKFILE = \"\/tmp\/dht22.lock\"\n\n# \u591a\u91cd\u8d77\u52d5\u9632\u6b62\ndef check_lock():\n    if os.path.exists(LOCKFILE):\n        with open(LOCKFILE) as f:\n            old_pid = f.read().strip()\n        if old_pid and os.path.exists(f\"\/proc\/{old_pid}\"):\n            print(f\"\u65e2\u306b\u8d77\u52d5\u4e2d (PID {old_pid})\u3001\u7d42\u4e86\u3057\u307e\u3059\", flush=True)\n            sys.exit(1)\n    with open(LOCKFILE, \"w\") as f:\n        f.write(str(os.getpid()))\n\ndef cleanup_lock():\n    try:\n        os.remove(LOCKFILE)\n    except OSError:\n        pass\n\ncheck_lock()\n\ndef create_dht():\n    return adafruit_dht.DHT22(board.D4, use_pulseio=False)\n\ndht = create_dht()\nerror_count = 0\nMAX_RETRY = 3\n\ntry:\n    while True:\n        try:\n            print(\"\u6e2c\u5b9a\u958b\u59cb\", flush=True)\n\n            try:\n                temp = dht.temperature\n                humidity = dht.humidity\n                error_count = 0\n            except RuntimeError as e:\n                print(f\"\u8aad\u307f\u53d6\u308a\u30a8\u30e9\u30fc\uff08\u7d99\u7d9a\uff09: {e}\", flush=True)\n                error_count += 1\n            except OSError as e:\n                print(f\"DHT\/GPIO\u30a8\u30e9\u30fc\uff08\u7d99\u7d9a\uff09: {type(e).__name__}: {e}\", flush=True)\n                error_count += 1\n            else:\n                if temp is None or humidity is None:\n                    print(\"None\u306e\u305f\u3081\u9001\u4fe1\u3057\u306a\u3044\", flush=True)\n                else:\n                    print(f\"\u6e29\u5ea6: {temp:.1f}\u00b0C  \u6e7f\u5ea6: {humidity:.1f}%\", flush=True)\n                    payload = {\"temperature\": temp, \"humidity\": humidity}\n                    try:\n                        r = requests.post(SERVER_URL, json=payload, timeout=10)\n                        print(f\"\u9001\u4fe1\u7d50\u679c: HTTP {r.status_code}\", flush=True)\n                        print(f\"\u5fdc\u7b54\u672c\u6587: {r.text&#91;:300]}\", flush=True)\n                        r.raise_for_status()\n                    except requests.RequestException as e:\n                        print(f\"HTTP\u9001\u4fe1\u30a8\u30e9\u30fc\uff08\u7d99\u7d9a\uff09: {type(e).__name__}: {e}\", flush=True)\n\n            # \u9023\u7d9a\u30a8\u30e9\u30fc\u6642\u306f\u5373\u5ea7\u306b\u518d\u521d\u671f\u5316\uff08\u5f85\u6a5f\u305b\u305a\uff09\n            if error_count &gt;= MAX_RETRY:\n                print(f\"\u9023\u7d9a{error_count}\u56de\u30a8\u30e9\u30fc \u2192 DHT\u518d\u521d\u671f\u5316\", flush=True)\n                try:\n                    dht.exit()\n                except Exception:\n                    pass\n                time.sleep(3)\n                dht = create_dht()\n                error_count = 0\n\n        except Exception:\n            print(\"\u60f3\u5b9a\u5916\u30a8\u30e9\u30fc:\", flush=True)\n            traceback.print_exc()\n\n        finally:\n            print(f\"{INTERVAL}\u79d2\u5f85\u6a5f\", flush=True)\n            time.sleep(INTERVAL)\n\nfinally:\n    cleanup_lock()\n    try:\n        dht.exit()\n    except Exception:\n        pass<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e3b\u306a\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>INTERVAL = 900&nbsp;\u306715\u5206\u9593\u9694 :<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\u597d\u304d\u306a\u79d2\u6570\u3067OK<\/mark><\/li>\n\n\n\n<li>flush=True&nbsp;\u3067\u30ed\u30b0\u3092\u3059\u3050journal\u306b\u51fa\u3059<\/li>\n\n\n\n<li>DHT22\/GPIO\u30a8\u30e9\u30fc\u3068HTTP\u9001\u4fe1\u30a8\u30e9\u30fc\u3092\u5206\u3051\u3066\u8868\u793a<\/li>\n\n\n\n<li>1\u56de\u306e\u6e2c\u5b9a\u5931\u6557\u30fb\u9001\u4fe1\u5931\u6557\u3067\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u7d42\u4e86\u3057\u306a\u3044<\/li>\n\n\n\n<li>None&nbsp;\u306e\u6e29\u6e7f\u5ea6\u306f\u9001\u4fe1\u3057\u306a\u3044<\/li>\n\n\n\n<li>\u60f3\u5b9a\u5916\u30a8\u30e9\u30fc\u306f traceback \u3092\u51fa\u3057\u3066\u8abf\u67fb\u53ef\u80fd\u306b\u3059\u308b<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0a\u8a18\u306e\u30b3\u30fc\u30c9\u3067\u3082OK\u3067\u3059\u304c\u3001\u66f4\u306bUpgarde\u3055\u305b\u305f\u30b3\u30fc\u30c9\u306f\u3053\u3061\u3089<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ver.2<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\/home\/pi\/script\/dht22.py<\/p>\n\n\n\n<pre class=\"wp-block-code has-vivid-red-color has-text-color has-link-color wp-elements-2618dbafc5d11be4178f22197c3aefe9\"><code>import time\nimport traceback\nimport os\nimport sys\nimport board\nimport adafruit_dht\nimport requests\n\nSERVER_URL = \"https:\/\/fideafact.ddns.net\/sensor\"\n\nSEND_INTERVAL = 300          # 5\u5206\u3054\u3068\u306b\u9001\u4fe1\nSAMPLE_COUNT = 12            # 1\u5206\u9593\u306712\u56de\u6e2c\u5b9a\nSAMPLE_INTERVAL = 5          # 5\u79d2\u3054\u3068\u306b\u6e2c\u5b9a\nLOCKFILE = \"\/tmp\/dht22.lock\"\n\nMAX_RETRY = 3\n\n# \u660e\u3089\u304b\u306b\u5909\u306a\u5024\u3092\u9664\u5916\u3059\u308b\u7bc4\u56f2\nTEMP_MIN = -40.0\nTEMP_MAX = 80.0\nHUM_MIN = 0.0\nHUM_MAX = 100.0\n\n\n# \u591a\u91cd\u8d77\u52d5\u9632\u6b62\ndef check_lock():\n    if os.path.exists(LOCKFILE):\n        with open(LOCKFILE) as f:\n            old_pid = f.read().strip()\n        if old_pid and os.path.exists(f\"\/proc\/{old_pid}\"):\n            print(f\"\u65e2\u306b\u8d77\u52d5\u4e2d (PID {old_pid})\u3001\u7d42\u4e86\u3057\u307e\u3059\", flush=True)\n            sys.exit(1)\n\n    with open(LOCKFILE, \"w\") as f:\n        f.write(str(os.getpid()))\n\n\ndef cleanup_lock():\n    try:\n        os.remove(LOCKFILE)\n    except OSError:\n        pass\n\n\ndef create_dht():\n    return adafruit_dht.DHT22(board.D4, use_pulseio=False)\n\n\ndef is_valid_reading(temp, humidity):\n    if temp is None or humidity is None:\n        return False\n\n    if not (TEMP_MIN &lt;= temp &lt;= TEMP_MAX):\n        return False\n\n    if not (HUM_MIN &lt;= humidity &lt;= HUM_MAX):\n        return False\n\n    return True\n\n\ndef trimmed_average(values):\n    \"\"\"\n    \u4e0a\u4e0b\u306e\u5024\u3092\u6368\u3066\u3066\u5e73\u5747\u3059\u308b\u3002\n    \u30c7\u30fc\u30bf\u6570\u304c\u591a\u3051\u308c\u3070\u4e0a\u4e0b2\u500b\u3001\u5c11\u306a\u3051\u308c\u3070\u4e0a\u4e0b1\u500b\u3092\u6368\u3066\u308b\u3002\n    \"\"\"\n    if not values:\n        return None\n\n    values = sorted(values)\n    n = len(values)\n\n    if n &gt;= 8:\n        trim = 2\n    elif n &gt;= 4:\n        trim = 1\n    else:\n        trim = 0\n\n    trimmed = values&#91;trim:n - trim] if trim &gt; 0 else values\n\n    if not trimmed:\n        return None\n\n    return sum(trimmed) \/ len(trimmed)\n\n\ndef measure_for_one_minute(dht):\n    global_error_count = 0\n    readings = &#91;]\n\n    print(\"1\u5206\u9593\u306e\u6e2c\u5b9a\u958b\u59cb\", flush=True)\n\n    for i in range(SAMPLE_COUNT):\n        try:\n            temp = dht.temperature\n            humidity = dht.humidity\n\n            if is_valid_reading(temp, humidity):\n                readings.append({\n                    \"temperature\": temp,\n                    \"humidity\": humidity\n                })\n                print(\n                    f\"{i + 1}\/{SAMPLE_COUNT}: \u6e29\u5ea6 {temp:.1f}\u00b0C \u6e7f\u5ea6 {humidity:.1f}%\",\n                    flush=True\n                )\n            else:\n                print(\n                    f\"{i + 1}\/{SAMPLE_COUNT}: \u7570\u5e38\u5024\u306e\u305f\u3081\u9664\u5916 temp={temp}, humidity={humidity}\",\n                    flush=True\n                )\n\n        except RuntimeError as e:\n            print(f\"{i + 1}\/{SAMPLE_COUNT}: \u8aad\u307f\u53d6\u308a\u30a8\u30e9\u30fc\uff08\u7d99\u7d9a\uff09: {e}\", flush=True)\n            global_error_count += 1\n\n        except OSError as e:\n            print(f\"{i + 1}\/{SAMPLE_COUNT}: DHT\/GPIO\u30a8\u30e9\u30fc\uff08\u7d99\u7d9a\uff09: {type(e).__name__}: {e}\", flush=True)\n            global_error_count += 1\n\n        if i &lt; SAMPLE_COUNT - 1:\n            time.sleep(SAMPLE_INTERVAL)\n\n    temperatures = &#91;r&#91;\"temperature\"] for r in readings]\n    humidities = &#91;r&#91;\"humidity\"] for r in readings]\n\n    avg_temp = trimmed_average(temperatures)\n    avg_humidity = trimmed_average(humidities)\n\n    return avg_temp, avg_humidity, len(readings), global_error_count\n\n\ncheck_lock()\n\ndht = create_dht()\nerror_count = 0\n\ntry:\n    while True:\n        cycle_start = time.time()\n\n        try:\n            avg_temp, avg_humidity, valid_count, read_errors = measure_for_one_minute(dht)\n            error_count += read_errors\n\n            if avg_temp is None or avg_humidity is None:\n                print(\"\u6709\u52b9\u306a\u6e2c\u5b9a\u5024\u304c\u4e0d\u8db3\u3057\u3066\u3044\u308b\u305f\u3081\u9001\u4fe1\u3057\u307e\u305b\u3093\", flush=True)\n                error_count += 1\n            else:\n                print(\n                    f\"\u5e73\u5747\u5024: \u6e29\u5ea6 {avg_temp:.1f}\u00b0C \u6e7f\u5ea6 {avg_humidity:.1f}% \"\n                    f\"\u6709\u52b9\u6e2c\u5b9a\u6570 {valid_count}\/{SAMPLE_COUNT}\",\n                    flush=True\n                )\n\n                payload = {\n                    \"temperature\": round(avg_temp, 2),\n                    \"humidity\": round(avg_humidity, 2),\n                    \"sample_count\": valid_count\n                }\n\n                try:\n                    r = requests.post(SERVER_URL, json=payload, timeout=10)\n                    print(f\"\u9001\u4fe1\u7d50\u679c: HTTP {r.status_code}\", flush=True)\n                    print(f\"\u5fdc\u7b54\u672c\u6587: {r.text&#91;:300]}\", flush=True)\n                    r.raise_for_status()\n\n                    error_count = 0\n\n                except requests.RequestException as e:\n                    print(f\"HTTP\u9001\u4fe1\u30a8\u30e9\u30fc\uff08\u7d99\u7d9a\uff09: {type(e).__name__}: {e}\", flush=True)\n\n            if error_count &gt;= MAX_RETRY:\n                print(f\"\u9023\u7d9a{error_count}\u56de\u30a8\u30e9\u30fc \u2192 DHT\u518d\u521d\u671f\u5316\", flush=True)\n                try:\n                    dht.exit()\n                except Exception:\n                    pass\n\n                time.sleep(3)\n                dht = create_dht()\n                error_count = 0\n\n        except Exception:\n            print(\"\u60f3\u5b9a\u5916\u30a8\u30e9\u30fc:\", flush=True)\n            traceback.print_exc()\n\n        finally:\n            elapsed = time.time() - cycle_start\n            wait_time = max(0, SEND_INTERVAL - elapsed)\n\n            print(f\"{wait_time:.0f}\u79d2\u5f85\u6a5f\", flush=True)\n            time.sleep(wait_time)\n\nfinally:\n    cleanup_lock()\n    try:\n        dht.exit()\n    except Exception:\n        pass<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u5909\u66f4\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>5\u5206\u3054\u3068\u306b\u9001\u4fe1<\/strong><\/li>\n\n\n\n<li>\u9001\u4fe1\u524d\u306b&nbsp;<strong>1\u5206\u9593\u306712\u56de\u6e2c\u5b9a<\/strong><\/li>\n\n\n\n<li>\u6e2c\u5b9a\u9593\u9694\u306f&nbsp;5\u79d2<\/li>\n\n\n\n<li>None\u3001\u7bc4\u56f2\u5916\u3001\u8aad\u307f\u53d6\u308a\u30a8\u30e9\u30fc\u306f\u9664\u5916<\/li>\n\n\n\n<li>\u6b8b\u3063\u305f\u5024\u304b\u3089\u4e0a\u4e0b\u3092\u6368\u3066\u308b<\/li>\n\n\n\n<li>\u5e73\u5747\u5024\u3092\u9001\u4fe1<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u9ad8\u983b\u5ea6\u6e2c\u5b9a\u306a\u3089\u3001DHT22\u3088\u308a&nbsp;<strong>Sensirion SHT45<\/strong>&nbsp;\u304c\u304a\u3059\u3059\u3081\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u304a\u3059\u3059\u3081\u9806<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30bb\u30f3\u30b5\u30fc<\/th><th>\u304a\u3059\u3059\u3081\u5ea6<\/th><th>\u7279\u5fb4<\/th><\/tr><\/thead><tbody><tr><td><strong>SHT45<\/strong><\/td><td>\u25ce<\/td><td>\u9ad8\u7cbe\u5ea6\u3001I2C\u63a5\u7d9a\u3001Raspberry Pi\u3067\u6271\u3044\u3084\u3059\u3044\u3002\u6e2c\u5b9a\u81ea\u4f53\u306f\u6570ms\u7d1a\u3001\u6e7f\u5ea6\u5fdc\u7b54\u306f\u7d044\u79d2<\/td><\/tr><tr><td><strong>SHT31 \/ SHT35<\/strong><\/td><td>\u25cb<\/td><td>\u5165\u624b\u6027\u304c\u3088\u304f\u3001\u5b9f\u7e3e\u304c\u591a\u3044\u3002\u6700\u592710\u56de\/\u79d2\u30e2\u30fc\u30c9\u3042\u308a\u3002\u305f\u3060\u3057\u6e7f\u5ea6\u5fdc\u7b54\u306f\u7d046\u301c8\u79d2<\/td><\/tr><tr><td><strong>SHT85<\/strong><\/td><td>\u25cb<\/td><td>\u9ad8\u7cbe\u5ea6\u3067\u4ea4\u63db\u3057\u3084\u3059\u3044\u5f62\u72b6\u3002\u696d\u52d9\u5bc4\u308a\u3002\u6e7f\u5ea6\u5fdc\u7b54\u306f\u7d048\u79d2<\/td><\/tr><tr><td><strong>BME280<\/strong><\/td><td>\u25b3<\/td><td>\u6e29\u6e7f\u5ea6\uff0b\u6c17\u5727\u304c\u53d6\u308c\u308b\u3002\u5b89\u4fa1\u3067\u4fbf\u5229\u3060\u304c\u3001\u6e29\u6e7f\u5ea6\u306e\u7cbe\u5ea6\u91cd\u8996\u306a\u3089SHT\u7cfb\u306e\u65b9\u304c\u7121\u96e3<\/td><\/tr><tr><td><strong>DHT22<\/strong><\/td><td>\u00d7<\/td><td>\u4f4e\u901f\u30022\u79d2\u4ee5\u4e0a\u3042\u3051\u308b\u5fc5\u8981\u304c\u3042\u308a\u3001\u9ad8\u983b\u5ea6\u6e2c\u5b9a\u306b\u306f\u4e0d\u5411\u304d<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u7d50\u8ad6:<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Raspberry Pi Zero 2 W\u3067\u4f7f\u3046\u306a\u3089\u3001\u307e\u305a\u306f&nbsp;<strong>SHT45\u642d\u8f09\u306eI2C\u30e2\u30b8\u30e5\u30fc\u30eb<\/strong>\uff08\u4fa1\u683c\u306f\u9ad8\u3044\uff09&nbsp;\u3092\u9078\u3076\u306e\u304c\u4e00\u756a\u3088\u3044\u3067\u3059\u3002Adafruit\u306a\u3069\u306eSHT45\u30d6\u30ec\u30a4\u30af\u30a2\u30a6\u30c8\u306fRaspberry Pi\u7528Python\u30e9\u30a4\u30d6\u30e9\u30ea\u3082\u3042\u308a\u3001DHT22\u304b\u3089\u7f6e\u304d\u63db\u3048\u3084\u3059\u3044\u3067\u3059\u3002\u305f\u3060\u3057\u6ce8\u610f\u70b9\u304c\u3042\u308a\u307e\u3059\u3002\u6e29\u5ea6\u306f\u6bd4\u8f03\u7684\u901f\u304f\u8ffd\u5f93\u3057\u307e\u3059\u304c\u3001<strong>\u6e7f\u5ea6\u306f\u7a7a\u6c17\u4e2d\u306e\u6c34\u5206\u304c\u30bb\u30f3\u30b5\u30fc\u5185\u90e8\u306b\u62e1\u6563\u3059\u308b\u6642\u9593\u304c\u3042\u308b\u305f\u3081\u30011\u79d2\u306b\u4f55\u5341\u56de\u8aad\u3093\u3067\u3082\u5b9f\u969b\u306e\u5909\u5316\u8ffd\u5f93\u306f\u6570\u79d2\u5358\u4f4d<\/strong>\u3067\u3059\u3002\u3064\u307e\u308a\u5b9f\u7528\u4e0a\u306f&nbsp;<strong>1\u79d2\u3054\u3068\u3001\u307e\u305f\u306f2\u79d2\u3054\u3068<\/strong>&nbsp;\u306e\u8a18\u9332\u3067\u5341\u5206\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">DHT22\u306e\u4ee3\u66ff\u3068\u3057\u3066\u306f\uff1a<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><code>DHT22 -&gt; SHT45 <\/code><br><code>DATA 1\u672c -&gt; I2C SDA\/SCL <\/code><br><code>\u8aad\u307f\u53d6\u308a\u9593\u9694 5\u5206 -&gt; 1\u301c2\u79d2\u3082\u53ef\u80fd <\/code><br><code>\u7cbe\u5ea6\u30fb\u5b89\u5b9a\u6027\u30a2\u30c3\u30d7<\/code><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Raspberry Pi\u3078\u306e\u63a5\u7d9a\u4f8b\uff1a<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><code>SHT45 VIN -&gt; 3.3V <\/code><br><code>SHT45 GND -&gt; GND <\/code><br><code>SHT45 SDA -&gt; GPIO2 \/ SDA <\/code><br><code>SHT45 SCL -&gt; GPIO3 \/ SCL<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DHT22\u306a\u3089 SAMPLE_INTERVAL = 5 \u306f\u304b\u306a\u308a\u5b89\u5168\u3067\u3059\u3002\u3082\u3063\u3068\u7d30\u304b\u304f\u3057\u305f\u3044\u5834\u5408\u3067\u3082\u3001DHT22\u3067\u306f 2\u79d2\u672a\u6e80 \u306b\u306f\u3057\u306a\u3044\u65b9\u304c\u3088\u3044\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-3a1bbf2b1a8dce0fb15e6f6541670909 wp-block-paragraph\"><strong>2. dht22.service<\/strong><br>\/etc\/systemd\/system\/dht22.service<\/p>\n\n\n\n<pre class=\"wp-block-code has-vivid-red-color has-text-color has-link-color wp-elements-a6a10de0c8e5e460d4d4a2c240898716\"><code>&#91;Unit]\nDescription=DHT22 Sensor\n\n&#91;Service]\nExecStart=\/usr\/bin\/python3 \/home\/pi\/dht22.py\nRestart=on-failure\nRestartSec=10\n\n# \u591a\u91cd\u8d77\u52d5\u9632\u6b62\nType=simple\n\n# \u505c\u6b62\u6642\u306b\u78ba\u5b9f\u306b\u30d7\u30ed\u30bb\u30b9\u3092\u6bba\u3059\nKillMode=control-group\nKillSignal=SIGTERM\nTimeoutStopSec=15\n\n&#91;Install]\nWantedBy=multi-user.target<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e3b\u306a\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>network-online.target&nbsp;\u3067Wi-Fi\/DNS\u304c\u4f7f\u3048\u308b\u72b6\u614b\u306b\u8fd1\u3065\u3044\u3066\u304b\u3089\u8d77\u52d5<\/li>\n\n\n\n<li>Restart=always&nbsp;\u3067\u843d\u3061\u305f\u3089\u81ea\u52d5\u518d\u8d77\u52d5<\/li>\n\n\n\n<li>RestartSec=10&nbsp;\u306710\u79d2\u5f85\u3063\u3066\u518d\u8d77\u52d5<\/li>\n\n\n\n<li>PYTHONUNBUFFERED=1&nbsp;\u3067\u30ed\u30b0\u3092\u5373\u6642\u51fa\u529b<\/li>\n\n\n\n<li>User=pi&nbsp;\u3067pi\u30e6\u30fc\u30b6\u30fc\u3068\u3057\u3066\u5b9f\u884c<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3. \u53cd\u6620\u30b3\u30de\u30f3\u30c9<\/strong><\/p>\n\n\n\n<p class=\"has-vivid-red-color has-text-color has-link-color wp-elements-f8addc1cbafc106e993a8af4f4ffed5e wp-block-paragraph\"><code>sudo systemctl daemon-reload sudo systemctl restart dht22.service<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>4. \u30ed\u30b0\u6c38\u7d9a\u5316<\/strong><br>\u518d\u8d77\u52d5\u524d\u306e\u30ed\u30b0\u3082\u6b8b\u3059\u305f\u3081\u306b\u5b9f\u65bd\u6e08\u307f\u3002<\/p>\n\n\n\n<p class=\"has-vivid-red-color has-text-color has-link-color wp-elements-426c5bd543bad9544594e468ab02bc7b wp-block-paragraph\"><code>sudo mkdir -p \/var\/log\/journal sudo systemctl restart systemd-journald<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>5. \u78ba\u8a8d\u30b3\u30de\u30f3\u30c9<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u73fe\u5728\u72b6\u614b\uff1a<\/p>\n\n\n\n<p class=\"has-vivid-red-color has-text-color has-link-color wp-elements-83f6e3c1bc6b2605759fd5d1c9231c84 wp-block-paragraph\"><code>systemctl status dht22.service<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u76f4\u8fd1\u30ed\u30b0\uff1a<\/p>\n\n\n\n<p class=\"has-vivid-red-color has-text-color has-link-color wp-elements-dc5dcb77965493e6480d156caea71b54 wp-block-paragraph\"><code>journalctl -u dht22.service -n 30 --no-pager -l<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">15\u5206\u5f8c\u306e\u52d5\u4f5c\u78ba\u8a8d\u4f8b\uff1a<\/p>\n\n\n\n<p class=\"has-vivid-red-color has-text-color has-link-color wp-elements-a7b6ae395dbc54c8a46be5427ed86f85 wp-block-paragraph\"><code>journalctl -u dht22.service --since \"2026-06-08 06:48:00\" --no-pager -l<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u671f\u5f85\u30ed\u30b0\uff1a<\/p>\n\n\n\n<p class=\"has-vivid-red-color has-text-color has-link-color wp-elements-4cb7e7a8a54593b757d0adf68f5b1d77 wp-block-paragraph\"><code>\u6e2c\u5b9a\u958b\u59cb \u6e29\u5ea6: 23.3\u00b0C \u6e7f\u5ea6: 71.0% \u9001\u4fe1\u5b8c\u4e86: HTTP 200 900\u79d2\u5f85\u6a5f<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u4eca\u56de\u5206\u304b\u3063\u305f\u3053\u3068<\/strong><br>\u843d\u3061\u305f\u76f4\u63a5\u30ed\u30b0\u306f\u3001journal\u6c38\u7d9a\u5316\u524d\u3060\u3063\u305f\u305f\u3081\u6b8b\u3063\u3066\u3044\u307e\u305b\u3093\u3067\u3057\u305f\u3002<br>\u305f\u3060\u3057\u3001\u73fe\u5728\u306f\u30ed\u30b0\u6c38\u7d9a\u5316\u6e08\u307f\u306a\u306e\u3067\u3001\u6b21\u56de\u3082\u3057\u518d\u8d77\u52d5\u3084\u7570\u5e38\u7d42\u4e86\u304c\u8d77\u304d\u3066\u3082\u539f\u56e0\u3092\u8ffd\u3044\u3084\u3059\u304f\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u307e\u305f\u3001\u8d77\u52d5\u76f4\u5f8c\u306b\u4ee5\u4e0b\u306eDNS\u5931\u6557\u304c\u51fa\u3066\u3044\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p class=\"has-vivid-red-color has-text-color has-link-color wp-elements-3d74f15e212db05f9ddd218bdfeee82c wp-block-paragraph\"><code>Failed to resolve 'fideafact.ddns.net'<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u305d\u306e\u305f\u3081\u3001dht22.service&nbsp;\u3092&nbsp;network-online.target&nbsp;\u5f85\u3061\u306b\u4fee\u6b63\u3057\u307e\u3057\u305f\u3002\u4eca\u306f&nbsp;HTTP 200&nbsp;\u304c\u8fd4\u3063\u3066\u304a\u308a\u3001\u6e2c\u5b9a\u30fb\u9001\u4fe1\u306f\u6b63\u5e38\u3067\u3059\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><a href=\"https:\/\/fideafact.ddns.net\/?p=93\">Part2\u306f\u53d7\u4fe1\u5074\u306b\u306a\u308a\u307e\u3059\u3002<\/a><\/h1>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u8ffd\u8a18<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">GPOI\u30a8\u30e9\u30fc\u3067\u3001\u30bb\u30f3\u30b5\u30fc\u304c\u8aad\u307f\u53d6\u308c\u306a\u3044\u72b6\u614b\u306b\u306a\u3063\u305f\u3002<br>\/home\/pi\/script\/dht22.py\u3092\u4fee\u6b63\uff08\u63b2\u8f09\u306f\u4fee\u6b63\u6e08\u30b3\u30fc\u30c9\uff09<br>\/etc\/systemd\/system\/dht22.service\uff08\u63b2\u8f09\u306f\u4fee\u6b63\u6e08\u30b3\u30fc\u30c9\uff09<br>Pi Zero\u30b7\u30ea\u30fc\u30ba\u306f\u305d\u3082\u305d\u3082<strong>pulseio\u304c\u4e0d\u5b89\u5b9a<\/strong>\u306a\u3053\u3068\u3067\u77e5\u3089\u308c\u3066\u304a\u308a\u3001<code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">use_pulseio=False<\/mark><\/code>&nbsp;\u304c\u63a8\u5968\u8a2d\u5b9a\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u78ba\u8a8d\u30fb\u53cd\u6620\u624b\u9806<\/p>\n\n\n\n<pre class=\"wp-block-code has-black-color has-text-color has-link-color wp-elements-0749132dd45446298bb6d2586b43f8ae\"><code># \u30b9\u30af\u30ea\u30d7\u30c8\u3092\u7de8\u96c6\nnano \/home\/pi\/script\/dht22.py\n\n# \u30b5\u30fc\u30d3\u30b9\u518d\u8d77\u52d5\u3000\u7de8\u96c6\u5f8c\u306b\u518d\u8d77\u52d5\u3055\u305b\u53cd\u6620\u3055\u305b\u308b\nsudo systemctl restart dht22.service\n\n# \u30ed\u30b0\u78ba\u8a8d\njournalctl -u dht22.service -f<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u76ee\u7684\u306f\u3001DHT22\u6e2c\u5b9a\u30fb\u9001\u4fe1\u3092\u5b89\u5b9a\u5316\u3057\u3001\u843d\u3061\u305f\u6642\u3084\u9001\u4fe1\u5931\u6557\u6642\u306b\u539f\u56e0\u3092\u8ffd\u3048\u308b\u3088\u3046\u306b\u3059\u308b\u3053\u3068\u3067\u3059\u3002 1. dht22.py\/home\/pi\/script\/dht22.py \u4e3b\u306a\u30dd\u30a4\u30f3\u30c8\uff1a \u4e0a\u8a18\u306e\u30b3\u30fc\u30c9\u3067\u3082OK\u3067\u3059\u304c\u3001\u66f4\u306bUp [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,10],"tags":[38,37,41,42,43,39,40,44],"class_list":["post-59","post","type-post","status-publish","format-standard","hentry","category-garage-products","category-raspberrypi","tag-dht22","tag-python","tag-raspberrpizerow2","tag-wordpress","tag-43","tag-39","tag-40","tag-44"],"_links":{"self":[{"href":"https:\/\/fideafact.ddns.net\/index.php?rest_route=\/wp\/v2\/posts\/59","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fideafact.ddns.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fideafact.ddns.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fideafact.ddns.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fideafact.ddns.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=59"}],"version-history":[{"count":8,"href":"https:\/\/fideafact.ddns.net\/index.php?rest_route=\/wp\/v2\/posts\/59\/revisions"}],"predecessor-version":[{"id":97,"href":"https:\/\/fideafact.ddns.net\/index.php?rest_route=\/wp\/v2\/posts\/59\/revisions\/97"}],"wp:attachment":[{"href":"https:\/\/fideafact.ddns.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=59"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fideafact.ddns.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=59"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fideafact.ddns.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=59"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}