{"componentChunkName":"component---src-templates-blog-post-js","path":"/tutorials/esp32-aq-sensor/","result":{"data":{"site":{"siteMetadata":{"title":"TinoIoT","author":"TinoIoT Officers"}},"markdownRemark":{"id":"438db72f-090e-56f4-878f-33e99e461708","html":"<h2>What you will need:</h2>\n<ul>\n<li><a href=\"https://m.banggood.com/PMS5003-PM2_5-Air-Particle-Dust-Sensor-Laser-Digital-Output-Module-High-Precision-Air-Haze-Detection-Smart-Home-Device-p-1553818.html?akmClientCountry=America&#x26;rmmds=orderdetail\">PMS5003 (pm2.5 sensor)</a></li>\n<li><a href=\"https://www.amazon.com/KeeYees-Internet-Development-Wireless-Compatible/dp/B07HF44GBT/ref=sr_1_3?crid=1N2U8UI66A7U4&#x26;dchild=1&#x26;keywords=nodemcu+esp8266&#x26;qid=1598505040&#x26;s=electronics&#x26;sprefix=nodemc%2Celectronics%2C228&#x26;sr=1-3\">Esp8266 (nodemcu)</a></li>\n<li>Arduino IDE</li>\n<li>Breadboard and cables</li>\n<li>ThingSpeak Account</li>\n</ul>\n<h2>Project Background</h2>\n<p>With ongoing fires, air pollution, and many harmful impurities in the air, it’s important to understand how the data you see from air quality maps come to be. This project guides you through how to set up your own iot project to measure pm2.5 (particulate matters), which is a significant factor in calculating aqi (air quality index).</p>\n<p>This New York Department of Health article goes more in depth of the health hazards if you are interested: <a href=\"https://www.health.ny.gov/environmental/indoors/air/pmq_a.htm#:~:text=Particles%20in%20the%20PM2.5%20size%20range%20are%20able%20to,nose%20and%20shortness%20of%20breath\">https://www.health.ny.gov/environmental/indoors/air/pmq_a.htm</a>.</p>\n<p>This monitoring project is made achievable via pms5003 sensor using light scattering principle, and that coupled with the esp over thingspeak allows for you to access the data from the pms over the internet.</p>\n<h2>Setting everything up / wiring</h2>\n<p><strong>This step applies if your purchase came with a connector. If it doesn’t, go to the next step titled wiring from pms to esp.</strong></p>\n<p><strong>The wiring for this module to its connector is as follows:</strong></p>\n<p>From Right to Left:\nPin 1 Vcc:  To Power supply (5V)\nPin 2 GND:  To gnd (negative power)\nPin 3 SET:  To SET, a TTL input signal\nPin 4 RXD:  To RXD, serial receiving\nPin 5 TXD:  To TXD, serial sending\nPin 6 RST:  To RST, which is reset signal</p>\n<p>Be careful not to plug these in backwards.</p>\n<p>The descriptions on the sensor saying ttl@3.3V simply indicates that any voltage applied that is below 3.3V will not work/run. That is why, in the next step, we have to connect to 5V on the esp.</p>\n<p>If you skipped here without a connector, just follow the following steps, but use 4 male to male dupont cables directly from the black and red connector strip into the breadboard tie points (or breadholes, as we unironically call them) that match to each pin of the esp. 2 indents on the white connector should match up to the rails in the PMS’s sensor port. If you need to brush up on some breadboard how-to’s, refer to this post here. Remember - each connector and each pin should match to their respective destinations!</p>\n<p><strong>The wiring from the pms5003 sensor to the esp8266 is as follows:</strong>\npms  esp\nPin 1 Vcc:  To Vin Pin (5V)\nPin 2 GND:  To gnd\nPin 3 TXD:  To TXD (tx)\nPin 4 RXD:  To RXD (rx)</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/46c90ffc60da60475ca074af15c9774d/8fdfc/wiring-diagram.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 46.012269938650306%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4jAAAuIwF4pT92AAAB0ElEQVQoz2P4jwv8+/vn+cO/Tx//f/vq/9vX/9+8BJGvnv//8h4s+w9IMODU+/vH3/t3fn78fPnMmbPHjl2/cP7q+XMXDh+6euzQzdt3fv38CdL879/f/39+g4z68/vvv3+///799ffv958/f//4+v/9u5MnTkTHROZkp1ZWFPgH+EVER7t7epeWlLx69RKk+ca9e0XbTuZsv1S79/T2TRvKsjPy42OqSoq2bl7//+/vNatW2duaT+lvLM5PCQ7yT89Id/fwmDxlItjh/xiOX75qMeegTvcep3kHV82aXm9jlKgmN39Cz9rpE///+rF1y2YLU4OUhAhfL9e0hJDqihwvb7/s7Mw3b16BbD526arVpB3GbVus+rbOnDuvKC05Myp8Un9325QJLz6/efHs+fx58yb09VSUlbY110/s6yyvrpw5a9aXL59Bmg+evaDRuEqlarVq9ZLV6zcChb58//H71687T17cefkY7Ly/335++fLt08cvH378/Hb7+d0Hz55BnX3r7r2aWUvr5qyqmTb/zJnTQNE/f/4AyRdvPpy+cfXcLRA6f/v6+TvXL9y5fvHujZPXLj1/+RqqGRIv2CPr9x8o+oVAf37/+fcPqh4AHdao8J3NAOcAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/46c90ffc60da60475ca074af15c9774d/94563/wiring-diagram.webp 163w,\n/static/46c90ffc60da60475ca074af15c9774d/647a8/wiring-diagram.webp 325w,\n/static/46c90ffc60da60475ca074af15c9774d/c1dc5/wiring-diagram.webp 650w,\n/static/46c90ffc60da60475ca074af15c9774d/1e975/wiring-diagram.webp 975w,\n/static/46c90ffc60da60475ca074af15c9774d/063bf/wiring-diagram.webp 1300w,\n/static/46c90ffc60da60475ca074af15c9774d/e393f/wiring-diagram.webp 1725w\"\n              sizes=\"(max-width: 650px) 100vw, 650px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/46c90ffc60da60475ca074af15c9774d/222b7/wiring-diagram.png 163w,\n/static/46c90ffc60da60475ca074af15c9774d/ff46a/wiring-diagram.png 325w,\n/static/46c90ffc60da60475ca074af15c9774d/a6d36/wiring-diagram.png 650w,\n/static/46c90ffc60da60475ca074af15c9774d/e548f/wiring-diagram.png 975w,\n/static/46c90ffc60da60475ca074af15c9774d/3c492/wiring-diagram.png 1300w,\n/static/46c90ffc60da60475ca074af15c9774d/8fdfc/wiring-diagram.png 1725w\"\n            sizes=\"(max-width: 650px) 100vw, 650px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/46c90ffc60da60475ca074af15c9774d/a6d36/wiring-diagram.png\"\n            alt=\"Wiring Diagram\"\n            title=\"Wiring Diagram\"\n            loading=\"lazy\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<p>You may have realized by this point that wiring is pretty intuitive for the most part - everything just matches up to their names, or their name meanings.</p>\n<h2>Getting Thingspeak up and Running</h2>\n<p>Please get a thingspeak account set up. Then, please reference this article, <a href=\"https://tinoiot.com/tutorials/esp32-thingspeak-wm/\">Sending Sensor Data to ThingSpeak</a>, to get some preliminary information on how to send live air sensor data and visualize/analyze said data via http and mqtt. However, instead of a BME280, it’ll be your pms5003 - focus on the setup as well as learning how to send live data, then come back here for a specific walkthrough. You could try <a href=\"https://tinoiot.com/tutorials/thingspeak-with-esp-mc#sending-data-to-thing-speak\">this</a> particular section of the Thingspeak walkthrough just to see some cool stuff happen - and to also test if you have all the wifi shenanigans done correctly.</p>\n<p>We will be using it to monitor the particulate levels sensed. Create a channel (you can name it air quality system or anything you’d like), and keep track of the url under “white a channel feed” and set it under the correct server name. Again, all is shown in the above linked article if you’re confused.</p>\n<p>Use the following code:</p>\n<p>The setup loop takes care of making sure wifi is all set up properly. We will be graphing the values in ug/m3, with the x axis being time, or rather just timestamps.</p>\n<div class=\"gatsby-highlight\" data-language=\"c\"><pre class=\"language-c\"><code class=\"language-c\"><span class=\"token comment\">// import statements allow for different types of sensors or controllers to be used</span>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#</span><span class=\"token directive keyword\">include</span> <span class=\"token string\">&lt;ESP8266WiFi.h></span></span>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#</span><span class=\"token directive keyword\">include</span> <span class=\"token string\">&lt;Arduino.h></span></span>\n\n<span class=\"token macro property\"><span class=\"token directive-hash\">#</span><span class=\"token directive keyword\">define</span> <span class=\"token macro-name\">LENG</span> <span class=\"token expression\"><span class=\"token number\">31</span>   </span><span class=\"token comment\">// 0x42 + 31 bytes equal to 32 bytes</span></span>\n<span class=\"token keyword\">unsigned</span> <span class=\"token keyword\">char</span> buf<span class=\"token punctuation\">[</span>LENG<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// these declarations are used to track the values to then plot into thingspeak. upon initalization they'll be set to 0 as a baseline.</span>\n<span class=\"token keyword\">int</span> PM01Value <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">int</span> PM2_5Value <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">int</span> PM10Value <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// allow for data to be sent to your computer via wifi</span>\n<span class=\"token keyword\">const</span> <span class=\"token keyword\">char</span> <span class=\"token operator\">*</span>ssid <span class=\"token operator\">=</span> <span class=\"token string\">\"YOUR_WIFI_NAME\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> <span class=\"token keyword\">char</span> <span class=\"token operator\">*</span>password <span class=\"token operator\">=</span> <span class=\"token string\">\"YOUR_WIFI_PASSWORD\"</span><span class=\"token punctuation\">;</span>\n\nString serverName <span class=\"token operator\">=</span> <span class=\"token string\">\"https://api.thingspeak.com/update?api_key=YOUR_WRITE_KEY\"</span><span class=\"token punctuation\">;</span>\nWiFiClient client<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">unsigned</span> <span class=\"token keyword\">long</span> lastTime <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">unsigned</span> <span class=\"token keyword\">long</span> timerDelay <span class=\"token operator\">=</span> <span class=\"token number\">60000</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// the setup loop's purpose is just to ensure connectivity and that your wifi is working</span>\n<span class=\"token keyword\">void</span> <span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    Serial<span class=\"token punctuation\">.</span><span class=\"token function\">begin</span><span class=\"token punctuation\">(</span><span class=\"token number\">9600</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    WiFi<span class=\"token punctuation\">.</span><span class=\"token function\">begin</span><span class=\"token punctuation\">(</span>ssid<span class=\"token punctuation\">,</span> password<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    Serial<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Connecting\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span>WiFi<span class=\"token punctuation\">.</span><span class=\"token function\">status</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">!=</span> WL_CONNECTED<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token function\">delay</span><span class=\"token punctuation\">(</span><span class=\"token number\">500</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        Serial<span class=\"token punctuation\">.</span><span class=\"token function\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\".\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    Serial<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    Serial<span class=\"token punctuation\">.</span><span class=\"token function\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Connected to WiFi network with IP Address: \"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    Serial<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span>WiFi<span class=\"token punctuation\">.</span><span class=\"token function\">localIP</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">void</span> <span class=\"token function\">loop</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// starts to read when it gets data from buffer</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>Serial<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span><span class=\"token number\">0x42</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        Serial<span class=\"token punctuation\">.</span><span class=\"token function\">readBytes</span><span class=\"token punctuation\">(</span>buf<span class=\"token punctuation\">,</span> LENG<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token comment\">// reads the sensor value in this loop and uses previous variable to keep track of it</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>buf<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0x4d</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token function\">checkValue</span><span class=\"token punctuation\">(</span>buf<span class=\"token punctuation\">,</span> LENG<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                PM01Value <span class=\"token operator\">=</span> <span class=\"token function\">transmitPM01</span><span class=\"token punctuation\">(</span>buf<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>  <span class=\"token comment\">// count PM1.0 value of the air detector module</span>\n                PM2_5Value <span class=\"token operator\">=</span> <span class=\"token function\">transmitPM2_5</span><span class=\"token punctuation\">(</span>buf<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>  <span class=\"token comment\">// count PM2.5 value of the air detector module</span>\n                PM10Value <span class=\"token operator\">=</span> <span class=\"token function\">transmitPM10</span><span class=\"token punctuation\">(</span>buf<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>  <span class=\"token comment\">// count PM10 value of the air detector module</span>\n            <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">// prints out the values read from the sensor out to your computer</span>\n    <span class=\"token keyword\">static</span> <span class=\"token keyword\">unsigned</span> <span class=\"token keyword\">long</span> OledTimer <span class=\"token operator\">=</span> <span class=\"token function\">millis</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token function\">millis</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> OledTimer <span class=\"token operator\">>=</span> <span class=\"token number\">1000</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        OledTimer <span class=\"token operator\">=</span> <span class=\"token function\">millis</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        Serial<span class=\"token punctuation\">.</span><span class=\"token function\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"PM1.0: \"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        Serial<span class=\"token punctuation\">.</span><span class=\"token function\">print</span><span class=\"token punctuation\">(</span>PM01Value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        Serial<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"  ug/m3\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        Serial<span class=\"token punctuation\">.</span><span class=\"token function\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"PM2.5: \"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        Serial<span class=\"token punctuation\">.</span><span class=\"token function\">print</span><span class=\"token punctuation\">(</span>PM2_5Value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        Serial<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"  ug/m3\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        Serial<span class=\"token punctuation\">.</span><span class=\"token function\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"PM10 : \"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        Serial<span class=\"token punctuation\">.</span><span class=\"token function\">print</span><span class=\"token punctuation\">(</span>PM10Value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        Serial<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"  ug/m3\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        Serial<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token comment\">// if able to send data over to thingspeak, it will do so here, and allow it to be displayed. You can look at ts api for clarification as needed</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>client<span class=\"token punctuation\">.</span><span class=\"token function\">connect</span><span class=\"token punctuation\">(</span>server<span class=\"token punctuation\">,</span> <span class=\"token number\">80</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            String postStr <span class=\"token operator\">=</span> apiKey<span class=\"token punctuation\">;</span>\n            postStr <span class=\"token operator\">+=</span> <span class=\"token string\">\"&amp;field1=\"</span><span class=\"token punctuation\">;</span>\n            postStr <span class=\"token operator\">+=</span> <span class=\"token function\">String</span><span class=\"token punctuation\">(</span>PM01Value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            postStr <span class=\"token operator\">+=</span> <span class=\"token string\">\"&amp;field2=\"</span><span class=\"token punctuation\">;</span>\n            postStr <span class=\"token operator\">+=</span> <span class=\"token function\">String</span><span class=\"token punctuation\">(</span>PM2_5Value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            postStr <span class=\"token operator\">+=</span> <span class=\"token string\">\"&amp;field3=\"</span><span class=\"token punctuation\">;</span>\n            postStr <span class=\"token operator\">+=</span> <span class=\"token function\">String</span><span class=\"token punctuation\">(</span>PM10Value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            postStr <span class=\"token operator\">+=</span> <span class=\"token string\">\"\\r\\n\\r\\n\"</span><span class=\"token punctuation\">;</span>\n\n            client<span class=\"token punctuation\">.</span><span class=\"token function\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"POST /update HTTP/1.1\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            client<span class=\"token punctuation\">.</span><span class=\"token function\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Host: api.thingspeak.com\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            client<span class=\"token punctuation\">.</span><span class=\"token function\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Connection: close\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            client<span class=\"token punctuation\">.</span><span class=\"token function\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"X-THINGSPEAKAPIKEY: \"</span> <span class=\"token operator\">+</span> apiKey <span class=\"token operator\">+</span> <span class=\"token string\">\"\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            client<span class=\"token punctuation\">.</span><span class=\"token function\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Content-Type: application/x-www-form-urlencoded\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            client<span class=\"token punctuation\">.</span><span class=\"token function\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Content-Length: \"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            client<span class=\"token punctuation\">.</span><span class=\"token function\">print</span><span class=\"token punctuation\">(</span>postStr<span class=\"token punctuation\">.</span><span class=\"token function\">length</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            client<span class=\"token punctuation\">.</span><span class=\"token function\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\\n\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            client<span class=\"token punctuation\">.</span><span class=\"token function\">print</span><span class=\"token punctuation\">(</span>postStr<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        client<span class=\"token punctuation\">.</span><span class=\"token function\">stop</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">char</span> <span class=\"token function\">checkValue</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">unsigned</span> <span class=\"token keyword\">char</span> <span class=\"token operator\">*</span>thebuf<span class=\"token punctuation\">,</span> <span class=\"token keyword\">char</span> leng<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">char</span> receiveflag <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> receiveSum <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> i <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;</span> <span class=\"token punctuation\">(</span>leng <span class=\"token operator\">-</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> i<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        receiveSum <span class=\"token operator\">=</span> receiveSum <span class=\"token operator\">+</span> thebuf<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    receiveSum <span class=\"token operator\">=</span> receiveSum <span class=\"token operator\">+</span> <span class=\"token number\">0x42</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">// check the serial data</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>receiveSum <span class=\"token operator\">==</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>thebuf<span class=\"token punctuation\">[</span>leng <span class=\"token operator\">-</span> <span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;&lt;</span> <span class=\"token number\">8</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> thebuf<span class=\"token punctuation\">[</span>leng <span class=\"token operator\">-</span> <span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        receiveSum <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n        receiveflag <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">return</span> receiveflag<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">int</span> <span class=\"token function\">transmitPM01</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">unsigned</span> <span class=\"token keyword\">char</span> <span class=\"token operator\">*</span>thebuf<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> PM01Val<span class=\"token punctuation\">;</span>\n    PM01Val <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>thebuf<span class=\"token punctuation\">[</span><span class=\"token number\">3</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;&lt;</span> <span class=\"token number\">8</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> thebuf<span class=\"token punctuation\">[</span><span class=\"token number\">4</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>  <span class=\"token comment\">// count PM1.0 value of the air detector module</span>\n    <span class=\"token keyword\">return</span> PM01Val<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">// transmit PM Value to PC</span>\n<span class=\"token keyword\">int</span> <span class=\"token function\">transmitPM2_5</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">unsigned</span> <span class=\"token keyword\">char</span> <span class=\"token operator\">*</span>thebuf<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> PM2_5Val<span class=\"token punctuation\">;</span>\n    PM2_5Val <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>thebuf<span class=\"token punctuation\">[</span><span class=\"token number\">5</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;&lt;</span> <span class=\"token number\">8</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> thebuf<span class=\"token punctuation\">[</span><span class=\"token number\">6</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>  <span class=\"token comment\">// count PM2.5 value of the air detector module</span>\n    <span class=\"token keyword\">return</span> PM2_5Val<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">// transmit PM Value to PC</span>\n<span class=\"token keyword\">int</span> <span class=\"token function\">transmitPM10</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">unsigned</span> <span class=\"token keyword\">char</span> <span class=\"token operator\">*</span>thebuf<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> PM10Val<span class=\"token punctuation\">;</span>\n    PM10Val <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>thebuf<span class=\"token punctuation\">[</span><span class=\"token number\">7</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;&lt;</span> <span class=\"token number\">8</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> thebuf<span class=\"token punctuation\">[</span><span class=\"token number\">8</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>  <span class=\"token comment\">// count PM10 value of the air detector module</span>\n    <span class=\"token keyword\">return</span> PM10Val<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>In a few minutes, you should now see 3 live data plots graphing pm1, 2.5, and 10! Congrats!</p>\n<!-- end of article -->","snippet":" With ongoing fires, air pollution, and many harmful impurities in the air, it’s important to understand how the data you…","fields":{"keywords":["air","thingspeak","data","client","sensor"],"slug":"/tutorials/esp32-aq-sensor/"},"frontmatter":{"title":"Air Quality Sensor","keywords":["pms5003","esp8266","arduino","thingspeak"],"description":"","author":"Mabel Lu","date":"September 20, 2020","featuredImage":{"childImageSharp":{"fluid":{"src":"/static/62158abbadaddbcc3e985a9eb83a3433/9842e/pms2.jpg","srcSet":"/static/62158abbadaddbcc3e985a9eb83a3433/07ab6/pms2.jpg 225w,\n/static/62158abbadaddbcc3e985a9eb83a3433/32fd5/pms2.jpg 450w,\n/static/62158abbadaddbcc3e985a9eb83a3433/9842e/pms2.jpg 900w,\n/static/62158abbadaddbcc3e985a9eb83a3433/47498/pms2.jpg 1200w","aspectRatio":1.331360946745562,"sizes":"(max-width: 900px) 100vw, 900px","base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAMCBAX/xAAUAQEAAAAAAAAAAAAAAAAAAAAC/9oADAMBAAIQAxAAAAHNm0Qrjgv/xAAZEAEAAwEBAAAAAAAAAAAAAAAAAQIRIRL/2gAIAQEAAQUCirwxHFusf//EABYRAQEBAAAAAAAAAAAAAAAAABECEP/aAAgBAwEBPwFpz//EABYRAAMAAAAAAAAAAAAAAAAAABARIf/aAAgBAgEBPwGIf//EABgQAAIDAAAAAAAAAAAAAAAAAAAQASFR/9oACAEBAAY/AjJdr//EABsQAAIDAAMAAAAAAAAAAAAAAAEhABARQXGR/9oACAEBAAE/IdjGOehVdknAPD1T/9oADAMBAAIAAwAAABDUz//EABgRAAIDAAAAAAAAAAAAAAAAABARITFR/9oACAEDAQE/EKKjR//EABYRAQEBAAAAAAAAAAAAAAAAABEhEP/aAAgBAgEBPxAq3P/EAB0QAQACAgIDAAAAAAAAAAAAAAERIQBBMVEQcYH/2gAIAQEAAT8Qo4WqDvK8RuCx6dfcYqVXV4pxJUmbMNco8P/Z","srcWebp":"/static/62158abbadaddbcc3e985a9eb83a3433/210c1/pms2.webp","srcSetWebp":"/static/62158abbadaddbcc3e985a9eb83a3433/975bf/pms2.webp 225w,\n/static/62158abbadaddbcc3e985a9eb83a3433/b8a88/pms2.webp 450w,\n/static/62158abbadaddbcc3e985a9eb83a3433/210c1/pms2.webp 900w,\n/static/62158abbadaddbcc3e985a9eb83a3433/99238/pms2.webp 1200w"}}}}}},"pageContext":{"slug":"/tutorials/esp32-aq-sensor/","pinned":false,"previous":{"fields":{"slug":"/blogs/all-about-iot/","pinned":false,"source":"regular"},"snippet":" IoT, internet of things, refers to the billions of physical devices that are connected to each other via the internet…","frontmatter":{"title":"All About IoT","category":"blog","thumbnailText":null,"author":"Shrinandan Narayanan","date":"August 22, 2020","redirect_from":null,"featuredImage":{"childImageSharp":{"fluid":{"src":"/static/de4b985ca18c5c8357a44de463aedd88/497c6/featuredImage.png","srcSet":"/static/de4b985ca18c5c8357a44de463aedd88/65e33/featuredImage.png 100w,\n/static/de4b985ca18c5c8357a44de463aedd88/69585/featuredImage.png 200w,\n/static/de4b985ca18c5c8357a44de463aedd88/497c6/featuredImage.png 400w,\n/static/de4b985ca18c5c8357a44de463aedd88/2a4de/featuredImage.png 600w,\n/static/de4b985ca18c5c8357a44de463aedd88/ee604/featuredImage.png 800w,\n/static/de4b985ca18c5c8357a44de463aedd88/00519/featuredImage.png 810w","aspectRatio":1.7857142857142858,"sizes":"(max-width: 400px) 100vw, 400px","base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAADA0lEQVQozx2S20/bdRjGv7+efqe2tBtrnCeEgascWg7tKKUCHThaULaEFkgPtHQwKWUdBQpCVRSTZSa6zC1MdqGJ0WmyeEGiZle6mOiF80JjovG/+fiNF+/Fmzx5nvfz5hHK9APM8mNsuUdYit9jXf0JpfILSvU3xOYfiK2/sDf+QX/vXxyNv1G2/kRUn6LWn2ItP0FkTnCUTtCuPUYk7yOM0UPMy0c4Ul+hZx+iZr/GkX+EsfEEJfMt4uqPuBq/43v3V5rqP6PkTxCpb9BWvkMv/YA6+yXuuc84lfoUJfo+Qr2wiWu0gTZ2EzNxC+8bH+JIHknhQ+zJT3DN3MObPsabOsJ++Rht+i7G1G3U5B3MiVt45h+gJu6g9NQQPRVp2F/BFd/H0nUN2+AO2tA+hhSL6CHq0C4vJRs0x/c4e+kdfKM1LJED1JnPOZM/xhjewRooY8QP8C3cR2lfRNg7C9j8BfT+NZ7NH2GEt7F2v8mZSJnzw0VCiQrRqVVenV6jb7LCC0MrOHtXsfivonZWcF88wAit4RxcR3kxjbB1raH1raN2F3FH1nH7F/5PGogtEIykiU6UGL6YJz6RpXekQCiWwj+QwhmucPq1hjRbx9qexRPfRWnNIKwtc5waq3M6cgO7bxK9dQEzXMf6cg7RMk9bMEVXYpnuyet4zl1BtC6jncvi7K/RFNvA0bGA5s/gvFCTh5QQlldyMmEerTOHLyET+1YRz8/yzNzHPJe7jWh+HWfsbfRwDTOwiD4gaTqLaG1ptIEKetcKansaM1LB3ruMEMEioiuPtadIU3IfV6SKrSODGtpECy5hbZvFHm5gxvZomXkLR7iM3pPHG5iX/9vGOyKvjGxxtvoF5qW6RO4r4rlyE9fUIe7xGo7+At7xDTxj16XJBnpfCV8og9G/hDm6g1vqtN6CrMwezdmP8GVlzWI38M5+gB6rSuSOFEZ0VS4SZbCMEihijm/jnNxFH9+X+5LEXMTRKyco3xMsYQvkpcmWrMsmxkhVtiIvcQtYzqf5Dxp6hqu/KpEIAAAAAElFTkSuQmCC","srcWebp":"/static/de4b985ca18c5c8357a44de463aedd88/1f5c5/featuredImage.webp","srcSetWebp":"/static/de4b985ca18c5c8357a44de463aedd88/d1f52/featuredImage.webp 100w,\n/static/de4b985ca18c5c8357a44de463aedd88/61e93/featuredImage.webp 200w,\n/static/de4b985ca18c5c8357a44de463aedd88/1f5c5/featuredImage.webp 400w,\n/static/de4b985ca18c5c8357a44de463aedd88/ad85c/featuredImage.webp 600w,\n/static/de4b985ca18c5c8357a44de463aedd88/58556/featuredImage.webp 800w,\n/static/de4b985ca18c5c8357a44de463aedd88/ed107/featuredImage.webp 810w"}}}}},"next":{"fields":{"slug":"/blogs/our-links/","pinned":false,"source":"regular"},"snippet":" Make sure you are using your student account (we won’t allow-in any other!) Right click on the link above ->…","frontmatter":{"title":"Our Links","category":"blog","thumbnailText":"🔗","author":"TinoIoT Officers","date":"October 5, 2020","redirect_from":null,"featuredImage":null}}}},"staticQueryHashes":["2390832784"]}