{"id":4867,"date":"2026-05-27T08:47:25","date_gmt":"2026-05-27T15:47:25","guid":{"rendered":"https:\/\/www.donluc.com\/?p=4867"},"modified":"2026-05-27T08:47:25","modified_gmt":"2026-05-27T15:47:25","slug":"project-15-environment-carbon-monoxide-sensor-mq7-mk39","status":"publish","type":"post","link":"https:\/\/www.donluc.com\/?p=4867","title":{"rendered":"Project #15: Environment &#8211; Carbon Monoxide Sensor MQ7 &#8211; Mk39"},"content":{"rendered":"<div style=\"width: 1200px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-4867-1\" width=\"1200\" height=\"675\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2026\/05\/DL2605Mk02W.mp4?_=1\" \/><a href=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2026\/05\/DL2605Mk02W.mp4\">https:\/\/www.donluc.com\/wp-content\/uploads\/2026\/05\/DL2605Mk02W.mp4<\/a><\/video><\/div>\n<p>&#8212;&#8212;<\/p>\n<p>#DonLucElectronics #DonLuc #CO #AHT20 #Environment #FireBeetle2ESP32E #ESP32 #Display #IoT #Project #Fritzing #Programming #Electronics #Microcontrollers #Consultant<\/p>\n<p>&#8212;&#8212;<\/p>\n<figure id=\"attachment_4869\" aria-describedby=\"caption-attachment-4869\" style=\"width: 710px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2026\/05\/DL2605Mk02a.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2026\/05\/DL2605Mk02a.jpg\" alt=\"\" width=\"720\" height=\"548\" class=\"size-full wp-image-4869\" srcset=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2026\/05\/DL2605Mk02a.jpg 720w, https:\/\/www.donluc.com\/wp-content\/uploads\/2026\/05\/DL2605Mk02a-300x228.jpg 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><figcaption id=\"caption-attachment-4869\" class=\"wp-caption-text\">Carbon Monoxide Sensor MQ7<\/figcaption><\/figure>\n<p>&#8212;&#8212;<\/p>\n<figure id=\"attachment_4870\" aria-describedby=\"caption-attachment-4870\" style=\"width: 710px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2026\/05\/DL2605Mk02b.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2026\/05\/DL2605Mk02b.jpg\" alt=\"\" width=\"720\" height=\"480\" class=\"size-full wp-image-4870\" srcset=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2026\/05\/DL2605Mk02b.jpg 720w, https:\/\/www.donluc.com\/wp-content\/uploads\/2026\/05\/DL2605Mk02b-300x200.jpg 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><figcaption id=\"caption-attachment-4870\" class=\"wp-caption-text\">Carbon Monoxide Sensor MQ7<\/figcaption><\/figure>\n<p>&#8212;&#8212;<\/p>\n<figure id=\"attachment_4871\" aria-describedby=\"caption-attachment-4871\" style=\"width: 710px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2026\/05\/DL2605Mk02c.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2026\/05\/DL2605Mk02c.jpg\" alt=\"\" width=\"720\" height=\"480\" class=\"size-full wp-image-4871\" srcset=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2026\/05\/DL2605Mk02c.jpg 720w, https:\/\/www.donluc.com\/wp-content\/uploads\/2026\/05\/DL2605Mk02c-300x200.jpg 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><figcaption id=\"caption-attachment-4871\" class=\"wp-caption-text\">Carbon Monoxide Sensor MQ7<\/figcaption><\/figure>\n<p>&#8212;&#8212;<\/p>\n<p><strong>Gravity: Analog CO Sensor (MQ7)<\/strong><\/p>\n<p>This is an Arduino Carbon Monoxide Sensor. It uses MQ7 probe to detect Carbon Monoxide (CO)  concentrations in the air from 20 to 2000ppm. The sensitivity can be adjusted by the potentiometer. The output is proportional to the density of gas. You can use analog reading to read the data from this sensor.<\/p>\n<p><strong>DL2605Mk02<\/strong><\/p>\n<p>1 x DFRobot FireBeetle 2 ESP32-E<br \/>\n1 x Fermion: 3.5\u201d 480&#215;320 TFT LCD Capacitive<br \/>\n1 x GDL Line 10 CM<br \/>\n1 x Gravity: Analog CO Sensor (MQ7)<br \/>\n1 x Gravity: AHT20 Temperature and Humidity Sensor<br \/>\n1 x Gravity: IO Shield for FireBeetle 2<br \/>\n1 x Terminal Block Board for FireBeetle 2 ESP32-E IoT<br \/>\n1 x Lithium Ion Battery &#8211; 1000mAh<br \/>\n1 x USB 3.0 to Type-C Cable<\/p>\n<p><strong>DL2605Mk02p<\/strong><\/p>\n<p><strong>DL2605Mk02p.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/****** Don Luc Electronics \u00a9 ******\r\nSoftware Version Information\r\nProject #15: Environment - Carbon Monoxide Sensor MQ7 - Mk39\r\n15-39\r\nDL2605Mk02p.ino\r\nDL2605Mk02\r\n1 x DFRobot FireBeetle 2 ESP32-E\r\n1 x Fermion: 3.5\u201d 480x320 TFT LCD Capacitive\r\n1 x GDL Line 10 CM\r\n1 x Gravity: Analog CO Sensor (MQ7)\r\n1 x Gravity: AHT20 Temperature and Humidity Sensor\r\n1 x Gravity: IO Shield for FireBeetle 2\r\n1 x Terminal Block Board for FireBeetle 2 ESP32-E IoT\r\n1 x Lithium Ion Battery - 1000mAh\r\n1 x USB 3.0 to Type-C Cable\r\n*\/\r\n\r\n\/\/ Include the Library Code\r\n\/\/ EEPROM Library to Read and Write EEPROM with Unique ID for Unit\r\n#include &quot;EEPROM.h&quot;\r\n\/\/ DFRobot Display GDL API\r\n#include &lt;DFRobot_GDL.h&gt;\r\n\/\/ AHT20 Humidity and Temperature Sensor\r\n#include &lt;DFRobot_AHT20.h&gt;\r\n\r\n\/\/ MQ7 Carbon Monoxide\r\nint iMQ7 = A0;\r\nint iValMQ7 = 0;\r\n\r\n\/\/ AHT20 Humidity and Temperature Sensor\r\nDFRobot_AHT20 aht20;\r\n\/\/ AHT20 Humidity and Temperature Sensor\r\nfloat h = 0;\r\nfloat t = 0;\r\n\r\n\/\/ Defined ESP32\r\n#define TFT_DC  D2\r\n#define TFT_CS  D6\r\n#define TFT_RST D3\r\n\r\n\/*dc=*\/ \/*cs=*\/ \/*rst=*\/\r\n\/\/ DFRobot Display 320x480\r\nDFRobot_ILI9488_320x480_HW_SPI screen(TFT_DC, TFT_CS, TFT_RST);\r\n\r\n\/\/ Software Version Information\r\n\/\/ EEPROM Unique ID Information\r\n#define EEPROM_SIZE 64\r\nString uid = &quot;&quot;;\r\n\r\n\/\/ Software Version Information\r\nString sver = &quot;15-39&quot;;\r\n\r\nvoid loop() {\r\n  \r\n  \/\/ isMQ7\r\n  isMQ7();\r\n  \r\n  \/\/ AHT20 Humidity and Temperature Sensor\r\n  isHT();\r\n\r\n  \/\/ isDisplay CO\r\n  isDisplayCO();\r\n\r\n  \/\/ Delay 1 Second\r\n  delay( 1000 );\r\n\r\n}\r\n<\/pre>\n<p><strong>getDisplay.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ DFRobot Display 320x480\r\n\/\/ DFRobot Display 320x480 - UID\r\nvoid isDisplayUID(){\r\n\r\n  \/\/ DFRobot Display 320x480\r\n  \/\/ Text Display\r\n  \/\/ Text Wrap\r\n  screen.setTextWrap(false);\r\n  \/\/ Rotation\r\n  screen.setRotation(3);\r\n  \/\/ Fill Screen =&gt; black\r\n  screen.fillScreen(0x0000);\r\n  \/\/ Text Color =&gt; white\r\n  screen.setTextColor(0xffff);\r\n  \/\/ Font =&gt; Free Sans Bold 12pt\r\n  screen.setFont(&amp;FreeSansBold12pt7b);\r\n  \/\/ TextSize =&gt; 1.5\r\n  screen.setTextSize(1.5);\r\n  \/\/ Don Luc Electronics\r\n  screen.setCursor(0, 30);\r\n  screen.println(&quot;Don Luc Electronics&quot;);\r\n  \/\/ Tilt Switch\r\n  screen.setCursor(0, 60);\r\n  screen.println(&quot;Carbon Monoxide&quot;);\r\n  \/\/ Version\r\n  screen.setCursor(0, 90);\r\n  screen.println(&quot;Version&quot;);\r\n  screen.setCursor(0, 120);\r\n  screen.println( sver );\r\n  \/\/ EEPROM\r\n  screen.setCursor(0, 150);\r\n  screen.println(&quot;EEPROM&quot;);\r\n  screen.setCursor(0, 180);\r\n  screen.println( uid );\r\n\r\n}\r\n\/\/ isDisplay CO\r\nvoid isDisplayCO(){\r\n\r\n  \/\/ DFRobot Display 320x480\r\n  \/\/ Text Display\r\n  \/\/ Text Wrap\r\n  screen.setTextWrap(false);\r\n  \/\/ Rotation\r\n  screen.setRotation(3);\r\n  \/\/ Fill Screen =&gt; white\r\n  screen.fillScreen(0xffff);\r\n  \/\/ Text Color =&gt; blue\r\n  screen.setTextColor(0x001F);\r\n  \/\/ Font =&gt; Free Sans Bold 12pt\r\n  screen.setFont(&amp;FreeSansBold12pt7b);\r\n  \/\/ TextSize =&gt; 1.5\r\n  screen.setTextSize(1.5);\r\n  \/\/ Vibration Senso\r\n  screen.setCursor(0, 30);\r\n  screen.println(&quot;Carbon Monoxide&quot;);\r\n  \/\/ Humidity\r\n  screen.setCursor(0, 70);\r\n  screen.println(&quot;Humidity&quot;);\r\n  screen.setCursor(0, 100);\r\n  screen.print( h );\r\n  screen.setCursor(65, 100);\r\n  screen.println( &quot;%RH&quot; );\r\n  \/\/ Temperature\r\n  screen.setCursor(0, 140);\r\n  screen.println(&quot;Temperature&quot;);\r\n  screen.setCursor(0, 170);\r\n  screen.print( t );\r\n  screen.setCursor(65, 170);\r\n  screen.println( &quot;C&quot; );\r\n  \/\/ MQ7 Carbon Monoxide\r\n  screen.setCursor(0, 210);\r\n  screen.println(&quot;MQ7 Carbon Monoxide&quot;);\r\n  screen.setCursor(0, 240);\r\n  screen.print( iValMQ7 );\r\n  screen.setCursor(65, 240);\r\n  screen.println( &quot;ppm&quot; );\r\n  \r\n}\r\n<\/pre>\n<p><strong>getEEPROM.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ isUID EEPROM Unique ID\r\nvoid isUID()\r\n{\r\n  \r\n  \/\/ Is Unit ID\r\n  uid = &quot;&quot;;\r\n  for (int x = 0; x &lt; 7; x++)\r\n  {\r\n    uid = uid + char(EEPROM.read(x));\r\n  }\r\n  \r\n}\r\n<\/pre>\n<p><strong>getgetHT.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ AHT20 Humidity and Temperature Sensor\r\nvoid isHT(){\r\n\r\n  if(aht20.startMeasurementReady(true)){\r\n\r\n    \/\/ Humidity\r\n    h = aht20.getHumidity_RH();\r\n  \r\n    \/\/ Temperature\r\n    t = aht20.getTemperature_C();\r\n    \r\n   }\r\n  \r\n}\r\n<\/pre>\n<p><strong>getMQ7.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ MQ7 Carbon Monoxide\r\n\/\/ isMQ7\r\nvoid isMQ7(){\r\n\r\n  iValMQ7 = analogRead( iMQ7 );\r\n\r\n}\r\n<\/pre>\n<p><strong>setup.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ Setup\r\nvoid setup()\r\n{\r\n \r\n  \/\/ Delay\r\n  delay( 100 );\r\n\r\n   \/\/ EEPROM Size\r\n  EEPROM.begin(EEPROM_SIZE);\r\n  \r\n  \/\/ EEPROM Unique ID\r\n  isUID();\r\n\r\n  \/\/ Delay\r\n  delay(100);\r\n\r\n  \/\/ DFRobot Display 320x480\r\n  screen.begin();\r\n\r\n  \/\/ Delay\r\n  delay( 100 );\r\n\r\n  \/\/ AHT20 Humidity and Temperature Sensor\r\n  aht20.begin();\r\n\r\n  \/\/ Delay\r\n  delay( 100 );\r\n\r\n  \/\/ DFRobot Display 320x480 - UID\r\n  \/\/ Don Luc Electronics\r\n  \/\/ Version\r\n  \/\/ EEPROM\r\n  isDisplayUID();\r\n\r\n  \/\/ Delay 5 Second\r\n  delay( 5000 );\r\n\r\n}\r\n<\/pre>\n<p>&#8212;&#8212;<\/p>\n<p><strong>People can contact us:<\/strong> https:\/\/www.donluc.com\/?page_id=1927<\/p>\n<p><strong>Consultant, R&#038;D, Electronics, IoT, Teacher and Instructor<\/strong><\/p>\n<ul>\n<li>Programming Language<\/li>\n<li>Single-Board Microcontrollers (PIC, Arduino, Raspberry Pi, Arm, Silicon Labs, Espressif, Etc&#8230;)<\/li>\n<li>IoT<\/li>\n<li>Wireless (Radio Frequency, Bluetooth, WiFi, Etc&#8230;)<\/li>\n<li>Robotics<\/li>\n<li>Automation<\/li>\n<li>Camera and Video Capture Receiver Stationary, Wheel\/Tank , Underwater and UAV Vehicle<\/li>\n<li>Unmanned Vehicles Terrestrial,  Marine and UAV<\/li>\n<li>Machine Learning<\/li>\n<li>Artificial Intelligence (AI)<\/li>\n<li>RTOS<\/li>\n<li>Sensors, eHealth Sensors, Biosensor, and Biometric<\/li>\n<li>Research &#038; Development (R &#038; D)<\/li>\n<li>Consulting<\/li>\n<\/ul>\n<p><strong>Follow Us<\/strong><\/p>\n<p><strong>Luc Paquin \u2013 Curriculum Vitae &#8211; 2026<\/strong><br \/>\nhttps:\/\/www.donluc.com\/luc\/LucPaquinCVEng2026Mk01.pdf<br \/>\nhttps:\/\/www.donluc.com\/luc\/<\/p>\n<p><strong>Web:<\/strong> https:\/\/www.donluc.com\/<br \/>\n<strong>Web:<\/strong> https:\/\/www.jlpconsultants.com\/<br \/>\n<strong>Facebook:<\/strong> https:\/\/www.facebook.com\/neosteam.labs.9\/<br \/>\n<strong>YouTube:<\/strong> https:\/\/www.youtube.com\/@thesass2063<br \/>\n<strong>DFRobot:<\/strong> https:\/\/learn.dfrobot.com\/user-10186.html<br \/>\n<strong>TikTok:<\/strong> https:\/\/www.tiktok.com\/@luc.paquin8<br \/>\n<strong>Hackster:<\/strong> https:\/\/www.hackster.io\/luc-paquin<br \/>\n<strong>LinkedIn:<\/strong> https:\/\/www.linkedin.com\/in\/jlucpaquin\/<\/p>\n<p><strong>Don Luc<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8212;&#8212; #DonLucElectronics #DonLuc #CO #AHT20 #Environment #FireBeetle2ESP32E #ESP32 #Display #IoT #Project #Fritzing #Programming #Electronics #Microcontrollers #Consultant &#8212;&#8212; &#8212;&#8212; &#8212;&#8212; &#8212;&#8212; Gravity: Analog CO Sensor (MQ7) This is an Arduino Carbon Monoxide Sensor. It uses MQ7 probe to detect Carbon Monoxide (CO) concentrations in the air from 20 to 2000ppm. The sensitivity can be adjusted by &#8230; <a title=\"Project #15: Environment &#8211; Carbon Monoxide Sensor MQ7 &#8211; Mk39\" class=\"read-more\" href=\"https:\/\/www.donluc.com\/?p=4867\" aria-label=\"Read more about Project #15: Environment &#8211; Carbon Monoxide Sensor MQ7 &#8211; Mk39\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[106,50,49,317,38,80,59,115,5,287,58,82,10],"tags":[6,92,427,102,4,320,87,19,107,83,85,24,9,84,27,33,34,108],"class_list":["post-4867","post","type-post","status-publish","format-standard","hentry","category-environment","category-arduino","category-consultant","category-dfrobot","category-digitalelectronics","category-esp32","category-fritzing","category-e-mentor","category-microcontrollers","category-program","category-arduino-programming","category-program-esp32","category-projects","tag-arduino","tag-battery","tag-carbon-monoxide-sensor-mq7","tag-components","tag-consultant","tag-dfrobot","tag-display","tag-electronics","tag-environment","tag-esp32","tag-fritzing","tag-microcontroller","tag-programming","tag-programming-esp32","tag-projects-2","tag-technology","tag-video-blog","tag-vlog"],"_links":{"self":[{"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/posts\/4867","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.donluc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4867"}],"version-history":[{"count":1,"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/posts\/4867\/revisions"}],"predecessor-version":[{"id":4872,"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/posts\/4867\/revisions\/4872"}],"wp:attachment":[{"href":"https:\/\/www.donluc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4867"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.donluc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4867"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.donluc.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4867"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}