{"id":1602,"date":"2021-02-04T14:03:01","date_gmt":"2021-02-04T05:03:01","guid":{"rendered":"https:\/\/www.rocher.kyoto.jp\/arbr\/?p=1602"},"modified":"2021-02-05T11:05:44","modified_gmt":"2021-02-05T02:05:44","slug":"m5stack-mhz19c-wifi-local-http","status":"publish","type":"post","link":"https:\/\/www.rocher.kyoto.jp\/arbr\/?p=1602","title":{"rendered":"M5Stack + MHZ19C + WiFi (Local\/http)"},"content":{"rendered":"\n<p>TODO \u3042\u3068\u3067\u3061\u3083\u3093\u3068\u66f8\u304d\u306a\u304a\u3059\uff08\u4f59\u88d5\u304c\u3042\u308c\u3070\uff09<\/p>\n\n\n\n<p>\u98db\u3070\u3059\u65b9 \u30bd\u30fc\u30b9<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;M5Stack.h&gt;\n#include &lt;MHZ19.h&gt;\n#include &lt;WiFi.h&gt;\n#include &lt;HTTPClient.h&gt;\n\n#define RX 16\n#define TX 17\n#define INTERVAL 6\n\nconst char* ssid     = \"XXXXXXX\";\nconst char* password = \"XXXXXXX\";\n\nMHZ19 myMHZ19;\n\nHardwareSerial  mySerial(1);\n\nvoid setup(){\n\n  M5.begin();\n  M5.Power.begin();\n  M5.Lcd.setTextSize(5);\n  M5.Lcd.print(\"start\");\n\n  Serial.begin(115200);\n  \n  WiFi.begin(ssid, password);\n  while (WiFi.status() != WL_CONNECTED) {\n    delay(500);\n    M5.Lcd.print(\".\");\n  }\n  M5.Lcd.println(\"\\r\\n connected\");\n  M5.Lcd.print(WiFi. localIP());\n\n  mySerial.begin(9600,SERIAL_8N1,RX,TX);\n  delay(100);\n  myMHZ19.begin(mySerial);\n  myMHZ19.autoCalibration(false);\n\n  delay(2000);\n}\n\nint count = 0;\nint co2 = 0;\nvoid loop()\n{\n  if ((count % INTERVAL) == 0 ) {\n    co2 = myMHZ19.getCO2();\n    displayCo2(co2);\n    doPost(co2);\n  } else {\n     M5.Lcd.print(\".\");\n  }\n  count++;\n  delay(1000);\n}\n\nvoid displayCo2(int co2) {\n  M5.Lcd.clear(); \n  M5.Lcd.setCursor(0, 0);\n  M5.Lcd.println(\"CO2 ppm\");\n  M5.Lcd.print(co2);\n}\n\nvoid doPost(int co2){\n  char json&#91;30];\n  sprintf(json, \"{\\\"co2\\\": \\\"%d\\\"}\", co2);\n  Serial.println(json);\n  \n  HTTPClient http;\n  http.begin(\"http:\/\/192.168.1.3:8081\/\");\n  http.addHeader(\"Content-Type\", \"application\/json\");\n  int httpCode = http.POST(json);\n  delay(1000);\n  Serial.printf(\"&#91;HTTP] GET... code: %d\\n\", httpCode);\n  http.end();\n     \n}<\/code><\/pre>\n\n\n\n<p>\u53d7\u3051\u308b\u307b\u3046 \u30bd\u30fc\u30b9 index.ts (\u96f0\u56f2\u6c17)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import express from 'express'\nimport moment from 'moment'\n\n\nconst app: express.Express = express()\napp.use(express.json())\napp.use(express.urlencoded({ extended: true }))\napp.use(express.static('public'))\n\napp.listen(8081, () =&gt; {\n  console.log('Running at Port 8081...')\n})\n\n\napp.post('\/', (req, res)=&gt; {\n  console.log(\"call\")\n\n  \/\/ console.log(moment().format())\n  console.log(req.body )\n  res.send('OK')\n})\n\napp.use((req, res) =&gt; {\n  res.sendStatus(404)\n})\n<\/code><\/pre>\n\n\n\n<p>URL\u306e\u6307\u5b9a\u3067\u672b\u5c3e\u306e\/\u304c\u629c\u3051\u3066\u3044\u308b\u3068M5Stack\u304c\u30a8\u30e9\u30fc&amp;\u30ea\u30d6\u30fc\u30c8\u3092\u7e70\u308a\u8fd4\u3057\u305f\u3002\u7d50\u69cb\u306f\u307e\u3063\u305f\u3002<\/p>\n\n\n\n<p>\u8a66\u9a13\u7528\u306e\u914d\u7dda\u306f<a href=\"https:\/\/www.rocher.kyoto.jp\/arbr\/?p=1598\" data-type=\"post\" data-id=\"1598\">\u524d\u306e\u30d6\u30ed\u30b0<\/a>\u53c2\u7167\u3002\u307e\u3060\u3001\u8a66\u9a13\u7528\u3067<a href=\"https:\/\/www.amazon.co.jp\/MH-Z19B-MH-Z19-CO2%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC-%E3%83%9E%E3%82%A4%E3%82%B3%E3%83%B3%E7%94%A8-%E4%BA%8C%E9%85%B8%E5%8C%96%E7%82%AD%E7%B4%A0%E6%BF%83%E5%BA%A6\/dp\/B08SQQM2Y7\/ref=sr_1_3?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;dchild=1&amp;keywords=EPEA&amp;qid=1612489674&amp;sr=8-3\">MHZ<\/a>\u3078\u306e\u96fb\u529b\u304c\u305f\u3076\u3093\u305f\u308a\u3066\u306a\u3044\u306f\u305a\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>TODO \u3042\u3068\u3067\u3061\u3083\u3093\u3068\u66f8\u304d\u306a\u304a\u3059\uff08\u4f59\u88d5\u304c\u3042\u308c\u3070\uff09 \u98db\u3070\u3059\u65b9 \u30bd\u30fc\u30b9 \u53d7\u3051\u308b\u307b\u3046 \u30bd\u30fc\u30b9 index.ts (\u96f0\u56f2\u6c17) URL\u306e\u6307\u5b9a\u3067\u672b\u5c3e\u306e\/\u304c\u629c\u3051\u3066\u3044\u308b\u3068M5Stack\u304c\u30a8\u30e9\u30fc&amp;\u30ea\u30d6\u30fc\u30c8\u3092\u7e70\u308a\u8fd4\u3057\u305f\u3002\u7d50\u69cb\u306f\u307e\u3063 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1602","post","type-post","status-publish","format-standard","hentry","category-1"],"_links":{"self":[{"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=\/wp\/v2\/posts\/1602","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1602"}],"version-history":[{"count":3,"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=\/wp\/v2\/posts\/1602\/revisions"}],"predecessor-version":[{"id":1609,"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=\/wp\/v2\/posts\/1602\/revisions\/1609"}],"wp:attachment":[{"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1602"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1602"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1602"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}