{"componentChunkName":"component---src-templates-blog-post-js","path":"/tutorials/thingspeak-bme280-raspberry-pi/","result":{"data":{"site":{"siteMetadata":{"title":"TinoIoT","author":"TinoIoT Officers"}},"markdownRemark":{"id":"685c840a-f1e9-542b-8d35-5f3880ef19ae","html":"<h2>What you will need:</h2>\n<ul>\n<li><a href=\"https://www.adafruit.com/product/2652\">Adafruit BME280</a> - You could use any sensor you want, you’ll just have to figure out how to interface with it on your own.</li>\n<li><a href=\"https://www.adafruit.com/product/4295?src=raspberrypi\">Raspberry Pi (RasPi)</a> - I’ll be using a 4B, but you should be able to use any model you want with wifi.</li>\n<li><a href=\"https://www.amazon.com/Multicolored-Breadboard-Dupont-Jumper-Wires/dp/B073X7P6N2\">Jumper Wires</a></li>\n<li>A few python modules for simplifying using the bme280 (We will get to this later)</li>\n<li><a href=\"https://thingspeak.com/\">ThingSpeak Account</a> - It’s free for up to 4 channels, which is plenty.</li>\n</ul>\n<h2>Project Overview</h2>\n<p>This project is meant to give you a practical example of what you can do with IoT skills. We will be using the RasPi because it has a wifi chip and GPIO (General Purpose Input Output pins). We will use this connectivity to send an HTTP GET request to ThingSpeak periodically so we can chart the temperature wherever we decide to place our device.</p>\n<h2>Setting up our RasPi</h2>\n<p>Make sure you have python3 and pip set up first.</p>\n<p>Next, we have to enable I2C on our RasPi. I2C is a common protocol for sending data. In your shell, run <code class=\"language-text\">sudo raspi-config</code> in the shell. Then select <code class=\"language-text\">Interfacing Options</code> > <code class=\"language-text\">I2C</code> > <code class=\"language-text\">yes</code>.</p>\n<p>Now we are going to install some python modules. In your shell run <code class=\"language-text\">pip3 install RPI.GPIO</code> then <code class=\"language-text\">pip3 install adafruit-blinka</code> then <code class=\"language-text\">pip3 install requests</code></p>\n<h2>Wiring</h2>\n<p>Connect the following pins with jumper wires (<strong>RasPi</strong> to <strong>bme280</strong>):\n<strong>3V</strong> to <strong>VIN</strong>\n<strong>3V</strong> to <strong>CS</strong>\n<strong>GND</strong> to <strong>GND</strong>\n<strong>SCL</strong> to <strong>SCK</strong>\n<strong>SDA</strong> to <strong>SDI</strong>\n<em>If your not sure, <a href=\"https://pinout.xyz/pinout/pin5_gpio3\">here</a> is the pinout for most RasPis.</em></p>\n<h2>Reading the BME280</h2>\n<p>Let’s verify that we have everything wired and set up correctly by attempting a read. Try out the following code:</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># Import necessary modules</span>\n<span class=\"token keyword\">import</span> board<span class=\"token punctuation\">,</span> busio<span class=\"token punctuation\">,</span> adafruit_bme280\n\ni2c <span class=\"token operator\">=</span> busio<span class=\"token punctuation\">.</span>I2C<span class=\"token punctuation\">(</span>board<span class=\"token punctuation\">.</span>SCL<span class=\"token punctuation\">,</span> board<span class=\"token punctuation\">.</span>SDA<span class=\"token punctuation\">)</span>\n\nbme280 <span class=\"token operator\">=</span> adafruit_bme280<span class=\"token punctuation\">.</span>Adafruit_BME280_I2C<span class=\"token punctuation\">(</span>i2c<span class=\"token punctuation\">)</span>\nbme280<span class=\"token punctuation\">.</span>sea_level_pressure <span class=\"token operator\">=</span> <span class=\"token number\">1013.4</span>\n\n<span class=\"token comment\"># Printing out our temp, humity, pressure, and altitude data by refencing our bme280 object.</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\\nTemperature: %0.1f C\"</span>  <span class=\"token operator\">%</span> bme280<span class=\"token punctuation\">.</span>temperature<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Humidity: %0.1f %%\"</span>  <span class=\"token operator\">%</span> bme280<span class=\"token punctuation\">.</span>humidity<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Pressure: %0.1f hPa\"</span>  <span class=\"token operator\">%</span> bme280<span class=\"token punctuation\">.</span>pressure<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Altitude = %0.2f meters\"</span>  <span class=\"token operator\">%</span> bme280<span class=\"token punctuation\">.</span>altitude<span class=\"token punctuation\">)</span></code></pre></div>\n<ul>\n<li>First, we created an <code class=\"language-text\">i2c</code> object that we can reference by passing in our <code class=\"language-text\">board.SCL</code> and <code class=\"language-text\">board.SDA</code> pins.</li>\n<li>\n<p>The we created a <code class=\"language-text\">bme2280</code> object by passing in our <code class=\"language-text\">i2c</code> object. We reference this object to get readings from our sensor.</p>\n<ul>\n<li>The <code class=\"language-text\">sea_level_pressure</code> of the <code class=\"language-text\">bme280</code> is defined for my location. Depending on where you are this might be different</li>\n</ul>\n</li>\n<li>Finally we <code class=\"language-text\">print</code> our data by referencing our <code class=\"language-text\">bme280</code>. Don’t worry if you don’t understand the <code class=\"language-text\">%0.1f</code>. It’s just a way to <a href=\"https://www.python-course.eu/python3_formatted_output.php\">format strings</a>.</li>\n</ul>\n<p>When you run the code, you should see something like this in the shell:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">Temperature: 23.1 C\nHumidity: 80.9 %\nPressure: 1004.9 hPa\nAltitude = 70.90 meters</code></pre></div>\n<h2>Setting up ThingsSpeak</h2>\n<p>First, create a ThingsSpeak account <a href=\"https://thingspeak.com/\">here</a>. Then go to the channels tab and click <em>Create New</em>. Name the channel something like BME280 or Sensor Test, whatever you want. Check the boxes for four fields, and enter the names Temperature, Pressure, Altitude, Humidity. Ignore the rest of the text inputs and click <em>Save Channel</em>.</p>\n<p>Now that we have our channel set up, go to the <em>API Keys</em> tab. Take note of the URL under <em>Write a Channel Feed</em>. It should look something like <code class=\"language-text\">https://api.thingspeak.com/update?api_key=&lt;YOUR KEY>&amp;field1=0</code>. Your key is the most important part and is what will allow you to get to your thing speak channel.</p>\n<h2>Sending Data to Thing Speak</h2>\n<p>Now let’s try sending some data to each of our channels four fields. Try out this code. <strong>Make sure to replace “YOUR_WRITE_KEY” with your own from ThingSpeak.</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># Import the request module</span>\n<span class=\"token keyword\">import</span> requests\n\nqueries <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"api_key\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"YOUR_WRITE_KEY\"</span><span class=\"token punctuation\">,</span>\n               <span class=\"token string\">\"field1\"</span><span class=\"token punctuation\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n               <span class=\"token string\">\"field2\"</span><span class=\"token punctuation\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> \n               <span class=\"token string\">\"field3\"</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3</span><span class=\"token punctuation\">,</span>\n               <span class=\"token string\">\"field4\"</span><span class=\"token punctuation\">:</span> <span class=\"token number\">4</span><span class=\"token punctuation\">}</span>\nr <span class=\"token operator\">=</span> requests<span class=\"token punctuation\">.</span>get<span class=\"token punctuation\">(</span><span class=\"token string\">'https://api.thingspeak.com/update'</span><span class=\"token punctuation\">,</span> params<span class=\"token operator\">=</span>queries<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">if</span> r<span class=\"token punctuation\">.</span>status_code <span class=\"token operator\">==</span> requests<span class=\"token punctuation\">.</span>codes<span class=\"token punctuation\">.</span>ok<span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Data Received!\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Error Code: \"</span> <span class=\"token operator\">+</span> <span class=\"token builtin\">str</span><span class=\"token punctuation\">(</span>r<span class=\"token punctuation\">.</span>status_code<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span></code></pre></div>\n<ul>\n<li>First, we create a dictionary object, <code class=\"language-text\">queries</code>. This is a cleaner way to add the queries at the end of our URL. For example the key-value pair <code class=\"language-text\">\"api_key\": \"YOUR_WRITE_KEY\"</code> would add <code class=\"language-text\">?api_key=YOUR_WRITE_KEY</code>.</li>\n<li>We then pass the <code class=\"language-text\">queries</code> dictionary, and the beginning of the ThingSpeak URL to our <a href=\"https://requests.readthedocs.io/en/master/\">requests</a> modules GET request. An HTTP GET request is a way for us to communicate over the internet.</li>\n<li>The result of the request is assigned to the object <code class=\"language-text\">r</code>. We then check if the <code class=\"language-text\">status_code</code> is ok, meaning that our data was successfully received by ThingSpeak. If the status is not ok, we report the error. Here is a <a href=\"https://en.wikipedia.org/wiki/List_of_HTTP_status_codes\">list of status codes</a> if you want to learn more.</li>\n</ul>\n<p>When you run this, you should see one point of data in each of the four fields on ThingSpeak and <code class=\"language-text\">Data Received!</code> in your shell.</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/73b4ff80f100c4a4e115b159f8be4d58/a8a6f/onepts.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: 66.25766871165644%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAAB1ElEQVQ4y3VT2U4VQRDtHzUi8YUEkCXB5dH4FS4kbBL0RT9B0btBcn2WPbxcuJrI7NM93ceq6p5JE6CTk+quOlNLz2m1tjfC/FYfT97vY+Zdi++Y/bCPuY0eHr39hvNpiuOrGzxd/yHcxxSfifjsZ7z4dABljIG1Ds45FGWFf0mGutZyZr8xDVmLpmkELfcmzZFkBRqKCZegtYbKi0pIgCda+ogtgxcna8GFePli9g6XCyquZEKAq7i2YrC+K99hRsW7WICNuDyt0jwyH/gj6jQrShRVLXuG7ka2Ml7sT7JcbOfTlJBHfXBZHtHKdVA7D/M4LlwH9eviDw7PpugdXQn6x8ESRifXtJ8gLbWAzwenU/z8PYm4EwzIDgnj8ynU6y9jvPp8iKWdIRa3+5jf7Ild/jjEc5IBy+Tyb4az60R8L4m7uD3AAvkXtnp4tjPA6u4IK4Q3X8c88u3WndH3THTPyI2hMc0dqkrz0l9se+lhb8JZRzpMslJ8JuZG55p/CuswFqcLMmn1xcnbhHlZdX7hMDeceQiRjbWN/6EhkJNsqrqWf++CeFthe/H7G+AmUn4pTSjO0qGOFT+X+DWYMDInMjnprKq6Dv0zvc2VmK49l3L9B4ee04pXNAyoAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/73b4ff80f100c4a4e115b159f8be4d58/94563/onepts.webp 163w,\n/static/73b4ff80f100c4a4e115b159f8be4d58/647a8/onepts.webp 325w,\n/static/73b4ff80f100c4a4e115b159f8be4d58/c1dc5/onepts.webp 650w,\n/static/73b4ff80f100c4a4e115b159f8be4d58/1e975/onepts.webp 975w,\n/static/73b4ff80f100c4a4e115b159f8be4d58/063bf/onepts.webp 1300w,\n/static/73b4ff80f100c4a4e115b159f8be4d58/dde0f/onepts.webp 1516w\"\n              sizes=\"(max-width: 650px) 100vw, 650px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/73b4ff80f100c4a4e115b159f8be4d58/222b7/onepts.png 163w,\n/static/73b4ff80f100c4a4e115b159f8be4d58/ff46a/onepts.png 325w,\n/static/73b4ff80f100c4a4e115b159f8be4d58/a6d36/onepts.png 650w,\n/static/73b4ff80f100c4a4e115b159f8be4d58/e548f/onepts.png 975w,\n/static/73b4ff80f100c4a4e115b159f8be4d58/3c492/onepts.png 1300w,\n/static/73b4ff80f100c4a4e115b159f8be4d58/a8a6f/onepts.png 1516w\"\n            sizes=\"(max-width: 650px) 100vw, 650px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/73b4ff80f100c4a4e115b159f8be4d58/a6d36/onepts.png\"\n            alt=\"What your channel should look like\"\n            title=\"What your channel should look like\"\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>Right now we are just adding the values 1, 2, 3, and 4 to the chart. Let’s try to get our live sensor data in there now.</p>\n<h2>Sending Live Data to ThingSpeak</h2>\n<p>Now we will combine everything to finally get our data from the sensor and then send it to our ThingSpeak channel. You will probably want to clear your channel before you start getting real data. To clear it, go to Channel Settings and click Clear Channel at the bottom of the page. We are also using the python scheduler module, which will allow us to set an interval for polling data.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># Import necessary modules</span>\n<span class=\"token keyword\">import</span> board<span class=\"token punctuation\">,</span> busio<span class=\"token punctuation\">,</span> adafruit_bme280\n<span class=\"token keyword\">import</span> requests\n<span class=\"token keyword\">import</span> sched<span class=\"token punctuation\">,</span> time\n\n<span class=\"token comment\"># Set up I2C and bme280 objects</span>\ni2c <span class=\"token operator\">=</span> busio<span class=\"token punctuation\">.</span>I2C<span class=\"token punctuation\">(</span>board<span class=\"token punctuation\">.</span>SCL<span class=\"token punctuation\">,</span> board<span class=\"token punctuation\">.</span>SDA<span class=\"token punctuation\">)</span>\nbme280 <span class=\"token operator\">=</span> adafruit_bme280<span class=\"token punctuation\">.</span>Adafruit_BME280_I2C<span class=\"token punctuation\">(</span>i2c<span class=\"token punctuation\">)</span>\nbme280<span class=\"token punctuation\">.</span>sea_level_pressure <span class=\"token operator\">=</span> <span class=\"token number\">1013.4</span>\n\n<span class=\"token comment\"># Create our scheduler to run every n seconds</span>\ns <span class=\"token operator\">=</span> sched<span class=\"token punctuation\">.</span>scheduler<span class=\"token punctuation\">(</span>time<span class=\"token punctuation\">.</span>time<span class=\"token punctuation\">,</span> time<span class=\"token punctuation\">.</span>sleep<span class=\"token punctuation\">)</span>\ninterval <span class=\"token operator\">=</span> <span class=\"token number\">60</span>\n\n<span class=\"token comment\"># Definition to read sensor data and send it to ThingSpeak</span>\n<span class=\"token keyword\">def</span> <span class=\"token function\">read_and_send</span><span class=\"token punctuation\">(</span>sc<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> \n\t<span class=\"token comment\"># Read bme280 and set the query string</span>\n    queries <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"api_key\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"YOUR_WRITE_KEY\"</span><span class=\"token punctuation\">,</span>\n               <span class=\"token string\">\"field1\"</span><span class=\"token punctuation\">:</span> <span class=\"token builtin\">round</span><span class=\"token punctuation\">(</span>bme280<span class=\"token punctuation\">.</span>temperature<span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n               <span class=\"token string\">\"field2\"</span><span class=\"token punctuation\">:</span> <span class=\"token builtin\">round</span><span class=\"token punctuation\">(</span>bme280<span class=\"token punctuation\">.</span>pressure<span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> \n               <span class=\"token string\">\"field3\"</span><span class=\"token punctuation\">:</span> <span class=\"token builtin\">round</span><span class=\"token punctuation\">(</span>bme280<span class=\"token punctuation\">.</span>altitude<span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n               <span class=\"token string\">\"field4\"</span><span class=\"token punctuation\">:</span> <span class=\"token builtin\">round</span><span class=\"token punctuation\">(</span>bme280<span class=\"token punctuation\">.</span>humidity<span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span>\n    <span class=\"token comment\"># Send the request to ThingSpeak</span>\n    r <span class=\"token operator\">=</span> requests<span class=\"token punctuation\">.</span>get<span class=\"token punctuation\">(</span><span class=\"token string\">'https://api.thingspeak.com/update'</span><span class=\"token punctuation\">,</span> params<span class=\"token operator\">=</span>queries<span class=\"token punctuation\">)</span>\n    <span class=\"token comment\"># Verify that ThingSpeak recived our data</span>\n    <span class=\"token keyword\">if</span> r<span class=\"token punctuation\">.</span>status_code <span class=\"token operator\">==</span> requests<span class=\"token punctuation\">.</span>codes<span class=\"token punctuation\">.</span>ok<span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Data Recived!\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Error Code: \"</span> <span class=\"token operator\">+</span> <span class=\"token builtin\">str</span><span class=\"token punctuation\">(</span>r<span class=\"token punctuation\">.</span>status_code<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token comment\"># Re-add this definition to run again in n seconds    </span>\n    s<span class=\"token punctuation\">.</span>enter<span class=\"token punctuation\">(</span>interval<span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> read_and_send<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>sc<span class=\"token punctuation\">,</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># Add our read_and_send task to the scheduler and run it.</span>\ns<span class=\"token punctuation\">.</span>enter<span class=\"token punctuation\">(</span>interval<span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> read_and_send<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>s<span class=\"token punctuation\">,</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\ns<span class=\"token punctuation\">.</span>run<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>We use the <a href=\"%5Bhttps://docs.python.org/3/library/sched.html%5D(https://docs.python.org/3/library/sched.html)\">sched module</a> to easily repeat every n seconds. If you ever want to change that time, simply change the <code class=\"language-text\">interval</code> to the number of seconds you want it to wait.</p>\n<p>Congrats! You should now have live data once a minute. </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/95e92d142f2a8911c648913e43e75838/93582/endts.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: 66.25766871165644%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAACO0lEQVQ4y4WSWU9UQRCF71/GBWMgUVwSfTDx1R+gorjhDBqi8ckHhMAwgiH4QJjFYfZ9+vZ6j6f6jpiQiJ3Urepbp6u7ur/k0ccDLL/exfW1XSw8+4aFp1vRX1vdxo2XO7j6fBs/m0NUuhMsv9rF0psSrvBfrsu1i9QuvtjB3fUSEiAAyIDpGBJra3FxZCFEi0Or6FwW4Ly/IPRIxtMU6UzBtNtIq1Xodgem24UPGUQePRc65zDTFrrfx+zwB3SzCX12BjuZMG7BzWaw1LCgYpDv5JWCGwzg2i1YLhBz0ylClsWCKtXSC9xwCMtijocwtRpct5fPjUHiWExOobWB8WyZlooNhlC9PqxKmQ/xlFJYTiE6w8rKemjHmOsNdUZrucMM/x7ZX58FXD7yfPL1uIlPh3UUShW836uguF+NcYHxh3IVRcadcYrBTEfd5kEN68wVStWolTUb9KL9zHzy5MsRHm58j09+i/jcXN3C7bd7cX6/sI+V9X2ctEao96d4UCxHu/OuhKW1bdoOVhjfK5SpLePx5qG0/L/hL2nZX7iegGQ0Ufkl93pI63XYOT5p44zzXzCjcXwMYyxGRMyTUzOeELMOdLWGlCSo01PoRoMavrLmK0sxdXwMy5e1wiATbjg6RyaEnENt+cLEQx0d5QySAkcOhYKIk3AY2IpPuTNPKU1ZQYALJRauAnGJyNAywYYsykIXsaGn3lLndf4/kU/snrtE8+E8FpFnPvzhcH4SKZzNNdFLTrqi9jeyWc3x9La/HgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/95e92d142f2a8911c648913e43e75838/94563/endts.webp 163w,\n/static/95e92d142f2a8911c648913e43e75838/647a8/endts.webp 325w,\n/static/95e92d142f2a8911c648913e43e75838/c1dc5/endts.webp 650w,\n/static/95e92d142f2a8911c648913e43e75838/1e975/endts.webp 975w,\n/static/95e92d142f2a8911c648913e43e75838/063bf/endts.webp 1300w,\n/static/95e92d142f2a8911c648913e43e75838/bc816/endts.webp 1524w\"\n              sizes=\"(max-width: 650px) 100vw, 650px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/95e92d142f2a8911c648913e43e75838/222b7/endts.png 163w,\n/static/95e92d142f2a8911c648913e43e75838/ff46a/endts.png 325w,\n/static/95e92d142f2a8911c648913e43e75838/a6d36/endts.png 650w,\n/static/95e92d142f2a8911c648913e43e75838/e548f/endts.png 975w,\n/static/95e92d142f2a8911c648913e43e75838/3c492/endts.png 1300w,\n/static/95e92d142f2a8911c648913e43e75838/93582/endts.png 1524w\"\n            sizes=\"(max-width: 650px) 100vw, 650px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/95e92d142f2a8911c648913e43e75838/a6d36/endts.png\"\n            alt=\"What it should look like when you are done\"\n            title=\"What it should look like when you are done\"\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<h2>Whats next?</h2>\n<p>Hopefully, from this, you have learned enough to figure out how to send any kind of data you want to ThingSpeak so you could explore some more on your own.</p>\n<ul>\n<li>There are some other kinds of visualizations that ThingSpeak has available for your data that you could check out.</li>\n<li>Make your channel public and share it with your friends.</li>\n<li>Try reading data from ThingSpeak using GET requests, as shown in the API Keys tab.</li>\n</ul>\n<!-- end of article -->","snippet":" This project is meant to give you a practical example of what you can do with IoT skills. We will…","fields":{"keywords":["bme280","data","thingspeak","i2c","channel"],"slug":"/tutorials/thingspeak-bme280-raspberry-pi/"},"frontmatter":{"title":"Sending Sensor Data to ThingSpeak (RasPi)","keywords":null,"description":null,"author":"William Mincher","date":"August 12, 2020","featuredImage":{"childImageSharp":{"fluid":{"src":"/static/d5ed5fc19cba131423df880b4947e723/9842e/mainpic.jpg","srcSet":"/static/d5ed5fc19cba131423df880b4947e723/07ab6/mainpic.jpg 225w,\n/static/d5ed5fc19cba131423df880b4947e723/32fd5/mainpic.jpg 450w,\n/static/d5ed5fc19cba131423df880b4947e723/9842e/mainpic.jpg 900w,\n/static/d5ed5fc19cba131423df880b4947e723/724e2/mainpic.jpg 1350w,\n/static/d5ed5fc19cba131423df880b4947e723/52258/mainpic.jpg 1800w,\n/static/d5ed5fc19cba131423df880b4947e723/10a43/mainpic.jpg 4032w","aspectRatio":1.331360946745562,"sizes":"(max-width: 900px) 100vw, 900px","base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAQCAwUG/8QAFwEAAwEAAAAAAAAAAAAAAAAAAAECA//aAAwDAQACEAMQAAABZxOhpzpgiI//xAAZEAEBAQEBAQAAAAAAAAAAAAABAgMSERP/2gAIAQEAAQUC80oHQua6OH6OErMkn//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABsQAAMAAgMAAAAAAAAAAAAAAAABERIhAlGB/9oACAEBAAY/ArlxXgntxlMstdFrIj//xAAaEAEAAwEBAQAAAAAAAAAAAAABABEhQVGB/9oACAEBAAE/IV4I+ohHaLZQgq+QDZNytuEN3Ues/9oADAMBAAIAAwAAABAM/wD/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAVEQEBAAAAAAAAAAAAAAAAAAAREP/aAAgBAgEBPxBJ/8QAHBABAQADAAMBAAAAAAAAAAAAAREAITFBYXGB/9oACAEBAAE/EKI2kFBOC8zUo6aad9yjgFrp6cSEkcGlwXESkCXxZiM/YL+5/9k=","srcWebp":"/static/d5ed5fc19cba131423df880b4947e723/210c1/mainpic.webp","srcSetWebp":"/static/d5ed5fc19cba131423df880b4947e723/975bf/mainpic.webp 225w,\n/static/d5ed5fc19cba131423df880b4947e723/b8a88/mainpic.webp 450w,\n/static/d5ed5fc19cba131423df880b4947e723/210c1/mainpic.webp 900w,\n/static/d5ed5fc19cba131423df880b4947e723/5616c/mainpic.webp 1350w,\n/static/d5ed5fc19cba131423df880b4947e723/685a2/mainpic.webp 1800w,\n/static/d5ed5fc19cba131423df880b4947e723/9d54b/mainpic.webp 4032w"}}}}}},"pageContext":{"slug":"/tutorials/thingspeak-bme280-raspberry-pi/","pinned":false,"previous":null,"next":{"fields":{"slug":"/tutorials/thingspeak-with-esp-mc/","pinned":false,"source":"regular"},"snippet":" This project is meant to give you a practical example of what you can do with IoT skills. We will…","frontmatter":{"title":"Sending Sensor Data to ThingSpeak (esp32)","category":"tutorial","thumbnailText":null,"author":"William Mincher","date":"August 22, 2020","redirect_from":["/tutorials/esp32-thingspeak-wm/","/pre-prods/esp32-thingspeak-wm/"],"featuredImage":{"childImageSharp":{"fluid":{"src":"/static/94ca67d6860306e7484202df2a48c0ff/2244e/mainpic.jpg","srcSet":"/static/94ca67d6860306e7484202df2a48c0ff/86e11/mainpic.jpg 100w,\n/static/94ca67d6860306e7484202df2a48c0ff/f836f/mainpic.jpg 200w,\n/static/94ca67d6860306e7484202df2a48c0ff/2244e/mainpic.jpg 400w,\n/static/94ca67d6860306e7484202df2a48c0ff/4fe8c/mainpic.jpg 600w,\n/static/94ca67d6860306e7484202df2a48c0ff/14b42/mainpic.jpg 800w,\n/static/94ca67d6860306e7484202df2a48c0ff/10a43/mainpic.jpg 4032w","aspectRatio":1.3333333333333333,"sizes":"(max-width: 400px) 100vw, 400px","base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIDBP/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAHdnq0XED//xAAaEAADAQADAAAAAAAAAAAAAAAAAQIDERIT/9oACAEBAAEFAnvCK2JfaXijzYlwf//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EAB4QAAIBAwUAAAAAAAAAAAAAAAABERIhMTJRcZGh/9oACAEBAAY/AszwOmNxMt6aukZZ/8QAHBAAAgEFAQAAAAAAAAAAAAAAAREAITFBUWFx/9oACAEBAAE/IRzF1HSFAMCVFZ1EOG2MvNzYnFQYpnpn/9oADAMBAAIAAwAAABDsP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QP//EAB0QAQEAAgEFAAAAAAAAAAAAAAERACExQVGRwfD/2gAIAQEAAT8QXqBoPnTGh4iUgwRnG94IQkonGFCW8rDxg/GexHvEYrbbOf/Z","srcWebp":"/static/94ca67d6860306e7484202df2a48c0ff/1f5c5/mainpic.webp","srcSetWebp":"/static/94ca67d6860306e7484202df2a48c0ff/d1f52/mainpic.webp 100w,\n/static/94ca67d6860306e7484202df2a48c0ff/61e93/mainpic.webp 200w,\n/static/94ca67d6860306e7484202df2a48c0ff/1f5c5/mainpic.webp 400w,\n/static/94ca67d6860306e7484202df2a48c0ff/ad85c/mainpic.webp 600w,\n/static/94ca67d6860306e7484202df2a48c0ff/58556/mainpic.webp 800w,\n/static/94ca67d6860306e7484202df2a48c0ff/9d54b/mainpic.webp 4032w"}}}}}}},"staticQueryHashes":["2390832784"]}