• First Steps
  • General
  • Projects
Facebook Twitter YouTube
Tutorials for Raspberry Pi Tutorials for Raspberry Pi
  • Hardware & GPIO
  • Sensors & Components
  • Scale
  • Cases
  • Fingerprint
  • Gas Sensor
  • Heartbeat
  • German
  • French
Tutorials for Raspberry Pi Tutorials for Raspberry Pi
Home»Hardware & GPIO»Configure and read out the Raspberry Pi gas sensor (MQ-X)

Configure and read out the Raspberry Pi gas sensor (MQ-X)

Facebook Twitter LinkedIn Tumblr Email Reddit
Raspberry Pi Gas Sensor MQ-2
Share
Facebook Twitter LinkedIn Email Tumblr Reddit Telegram WhatsApp

Sensors are necessary to detect the components of the air. These are used e.g. in smoke detectors. However, instructions for using these gas sensors at the Raspberry Pi are rare, which is why in this tutorial the general use of such MQ modules at the Raspberry Pi is shown. Thus, e.g. smoke detectors or air quality testers can be built.

How to configure any MQ sensor and read it out with the Pi will be shown on the example of the Raspberry Pi gas sensor MQ2 in this tutorial. All other sensors (MQ3, MQ-135, etc.) can also be adapted with a few additional steps.

 

Accessories

All MQ-X sensors return analogue signals, which we can not easily read at the Raspberry Pi. One possibility would be to use an Arduino, but we can also use an analog-to-digital converter (ADC), which can be read out via the I2C bus. In addition, we also need a logic level converter.

  • Analog-Digital Converter (8 Ports): US / UK
  • 5V to 3.3V Logic Level Converter: US / UK
  • Breadboard: US / UK
  • Jumper wire: US / UK

These components are independent of the selected gas sensor. There are also many different sensors for the Raspberry Pi, which are already available for a few bucks and are suitable for different gases:

  • MQ-2 (Methane, Butane, LPG, smoke): US / UK
  • MQ-3 (Alcohol, Ethanol, smoke): US / UK
  • MQ-4 (Methane, CNG Gas): US / UK
  • MQ-5 (Natural gas, LPG): US / UK
  • MQ-6 (LPG, butane gas): US / UK
  • MQ-7 (Carbon Monoxide): US / UK
  • MQ-8 (Hydrogen Gas): US / UK
  • MQ-9 (Carbon Monoxide, flammable gasses): US / UK
  • MQ-131 (Ozone): US / UK
  • MQ-135 (Benzene, Alcohol, smoke): US / UK
  • MQ-136 (Hydrogen Sulfide gas): US / UK
  • MQ-137 (Ammonia): US / UK
  • MQ-138 (Benzene, Toluene, Alcohol, Acetone, Propane, Formaldehyde gas): US / UK
  • MQ-214 (Methane, Natural gas): US / UK
  • MQ-216 (Natural gas, Coal gas): US / UK
  • MQ-303A (Alcohol, Ethanol, smoke): US / UK
  • MQ-306A (LPG, butane gas): US / UK
  • MQ-307A (Carbon Monoxide): US / UK
  • MQ-309A (Carbon Monoxide, flammable gasses): US / UK
  • MG811 (Carbon Dioxide (CO2)): US / UK
  • AQ-104 (air quality): US / UK
  • AQ-2 (Flamable gasses, smoke): US / UK
  • AQ-3 (Alcohol, Benzine): US / UK
  • AQ-7 (Carbon Monoxide): US / UK

You can find the full list with additional information here.

I recommend to use a sensor with a soldered PCB, because no further cabling and the use of resistors and capacitors is necessary.

Details on the individual Raspberry Pi gas sensors can also be found in the corresponding data sheets. Simply google the name of the sensor including “datasheet”. There is also the voltage at which the sensor operates mentioned.

If someone wants to build an alcohol tester or something similar, you should also be aware that these modules are not absolutely accurate and can not compete with a professional measurement.

 

Connection between MQ-2 and Raspberry Pi

In this example, we use a 5V voltage as output. This is too much for the GPIOs, which is why we use a logic level converter (TTL) that cuts down the voltage. If you use a sensor other than the MQ-2 and it has a different voltage, the setup must of course be adjusted.

After the MCP3008 is correctly connected, we use port 0 and connect it to RX0 of the TTL. On the opposite side is RX1, which is connected to the analog pin (A0) of the MQ2 sensor. Also connect 3.3V from the Raspberry Pi (LV) and 5V (HV) to the TTL. And also 5V to the VCC pin of the gas sensor and GND from the Raspberry Pi comes to GND on the LV and HV side of the TTL, as well as to GND of the MQ2.

Schematically the whole looks as follows:

Raspberry Pi Gas Sensor MQ2 Steckplatine

I use the 5V of the Raspberry Pi’s. However, an external power supply is recommended if other sensors and modules or input devices (keyboard, mouse, touchscreen) are used. For this, the sensor is simply supplied with current from the external source (HV side of the TTL) and the ground connection (Minus / GND) is connected to GND of the Raspberry Pi.

 

Configuration of the Raspberry Pi Gas Sensor – Preparation

The concentration of a gas is given in PPM (parts per million). One difficulty of the MQ-2 is that a single analog value is given with which the gas content in the air has to be calculated for the various supported gases. However, the sensor must be configured for this purpose. Since this manual is also applicable to another Raspberry Pi gas sensor, the procedure is as follows:

First, we have to see the data sheet of the respective module, which contains a diagram:

Raspberry Pi Gas Sensor MQ-2 Datasheet
The specified values are in logarithmic scale.

However, the scaling of the values is not linear but logarithmic to the base 10 (log). so, the first stroke on the X axis is 200, then 300, etc. The first stroke after 1000 is 2000, etc. The distance between is linear. The idea behind this script for calibration and reading is to create a straight line and calculate the amount of gas (in ppm). To do this, we need two points to calculate the slope.

Let us take the example of LPG. We therefore take the point P1 (x = 200, y = ~ 1.62) and P2 (x = 10000, y = ~ 0.26). To calculate the “real” values, we apply the ten logarithm. Using the two-point form, we can calculate the slope, which in our case is -0.47 (link to the calculation). With the slope and the calculated logarithm from the left point (x = 2.3, y = 0.21), we can now determine the straight line.

For the remaining gases the calculation is equivalent and can be carried out in the same way. Anyone who wants to have more reading material can do this here.

 

Calibration of the Raspberry Pi Gas Sensor  – Code

Enough of the theory – we want to use the sensor now. For this purpose you can use the code I have customized, which is located in a GitHub repository. Also included is a class for reading the MCP3008. First we clone the directory:

git clone https://github.com/tutRPi/Raspberry-Pi-Gas-Sensor-MQ

Then we change to the directory and run the existing Python test file.

cd Raspberry-Pi-Gas-Sensor-MQ
sudo python example.py

The calibration is started automatically during initialization. It is important that the sensor is in good / fresh air as smoke / other gases would falsify the calibration. The process takes a few seconds, but the gas content can already be measured thereafter (see video). Some sensors are quite hot, but this should not be a cause for concern.

Some users reported that the values become accurate only after some time. I can not verify this, because I do not have a professional measuring device. If someone can confirm or verify, since he has such a device at home, I would be pleased about feedback as a comment 🙂

Featured
Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
Previous ArticleRaspberry Pi Fingerprint Sensor zur Authentifizierung nutzen
Next Article WS2812 RGB LED Streifen per Raspberry Pi steuern

Related Posts

How to build a ESP8266 Scale (with Weight Sensor HX711)

How-To: Bluetooth Connection between ESP32’s and Raspberry Pi’s

How to create a Solar Powered Raspberry Pi Bitcoin Miner

How to build a Smart Agriculture System using IoT

203 Comments

  1. Aldiansyah on 29. July 2017 2:49

    I have thanks in raspberry programming for Gas sensor MQ 7 can i ask for help sir ?? Especially in entering calculations for CO gas

    Reply
    • Felix on 29. July 2017 10:53

      If you want to use another sensor, you have to adjust the formula, depending on the sensor’s datasheet (cf. my example).

      Reply
      • lghtrr on 16. February 2020 14:57

        hi, i’ve been fixed it for MQ138. but how about TGS2620 with just one curve for the main gas?

    • Izzati Razali on 8. June 2021 7:43

      Hi can you teach me how you do the mq7 gas sensor?

      Reply
  2. George on 4. August 2017 23:36

    Hello !
    Thank you for your work ! Also I have a question.
    Does the calibration have to be for 48 hours, does the sensor has to be pluged for 48 hours ? And how do you know the value of the load resistance ?

    Reply
    • Felix on 5. August 2017 0:12

      Hi,
      usually the calibration needs about 10 seconds (enough precision for my applications). The value was given (you can change it, depending on your sensor).

      Reply
      • George on 5. August 2017 13:42

        Thank you for your response 🙂 !
        I am using a MQ-7 sensor, do you happen to know what is the load resistance of it ? Or do you put it manualy in series with the sensor ? (in witch case it could be what you want)

      • Doubrapade Ikporukpo on 23. September 2019 19:28

        Hi Felix, I am a student in University of Ibadan, Nigeria, working on an air quality project, please I need a Nitrogen oxide and Sulphur dioxide gas sensor that is compatible with the raspberry pi. Any suggestions on where to acquire these?

  3. Konda Reddy Satya Narayana Reddy on 8. August 2017 7:26

    For my mq135 its giving Ro as 0 in the terminal

    Reply
    • Carolina Chaves on 18. August 2017 5:45

      Hi, I also have a MQ135 sensor, I am having problems with programming it, can you help me? My email is: caroch1179@gmail.com

      Reply
      • Shivam Durgbuns on 28. September 2017 17:39

        Please help me with sensor MQ135 & MQ7. I need for my project work. Any type of help is appreciated. 🙂
        email id : shivamdurgbuns@gmail.com

      • Tanvi on 6. February 2019 8:53

        Can I also get for mq 135?

      • ho jin on 8. April 2019 8:25

        Please help me with sensor MQ135. I need for my project work. Any type of help is appreciated. thank you
        My email is linghojin1996@gmail.com

  4. Konda Reddy Satya Narayana Reddy on 8. August 2017 7:29

    Hi I’m using the same setup as yours and din’t change code also. But in the terminal i’m getting something like
    “Press CTRL+C to abort.
    Calibrating…
    Calibration is done…

    Ro=0.000000 kohm

    Abort by user”
    Please let me know what to do.

    Reply
  5. Ralph on 8. November 2017 22:30

    I keep getting this

    pi@octopi:~/Raspberry-Pi-Gas-Sensor-MQ $ sudo python example.py
    Traceback (most recent call last):
    File “example.py”, line 1, in
    from mq import *
    File “/home/pi/Raspberry-Pi-Gas-Sensor-MQ/mq.py”, line 6, in
    from MCP3008 import MCP3008
    File “/home/pi/Raspberry-Pi-Gas-Sensor-MQ/MCP3008.py”, line 1, in
    from spidev import SpiDev
    ImportError: No module named spidev

    Reply
    • Felix on 8. November 2017 23:27

      You have to install spidev…

      Reply
  6. jesa javi on 10. November 2017 4:53

    Hi Can You Help Me Put Condition For Example Smoke Is Greater Than 1? then my buzzer will turn on..Its A Big Help For Me to Finish My Project..Godbless

    Reply
  7. syeda aiman on 9. December 2017 18:59

    i am not using mcp. i have directly connected the sensor to board without any converter.what kind of changes I have to do in code?

    Reply
    • Felix on 10. December 2017 19:53

      It is not possible. You will need an ADC, as the Raspberry Pi cannot read analogue inputs.

      Reply
  8. syeda aiman on 9. December 2017 19:00

    i need help i am not using mcp. i have directly connected the sensor to board without any converter.what kind of changes I have to do in code?

    Reply
    • Felix on 10. December 2017 19:52

      If more than 3.3V are connected to the GPIOs, you can break them.

      Reply
  9. Geraldy Martin on 11. December 2017 6:58

    Hello, im using mcp3002 instead mcp3008. What change should I made?

    Reply
  10. bobafett on 17. December 2017 15:25

    always show “Abort by user”, i’ll tried wiring like this tutorial and use code same on this. anyone can help?

    Reply
    • Felix on 17. December 2017 16:06

      Log the exception.

      Reply
      • Shyam on 29. January 2018 12:16

        Please say code sir

      • MOHD IDHAM BIN PODANG on 2. October 2018 20:27

        how to log the exception?

  11. Lucian on 17. December 2017 16:04

    Hi, I am using an ADS1115 analog to digital converter instead of MCP and MQ-2 sensor
    My code is based on https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code

    import time, signal, sys
    from Adafruit_ADS1x15 import ADS1x15
    
    ADS1115 = 0x01 # 16-bit ADC
    
    # Select the gain
    # gain = 6144 # +/- 6.144V
    gain = 4096 # +/- 4.096V
    # gain = 2048 # +/- 2.048V
    # gain = 1024 # +/- 1.024V
    # gain = 512 # +/- 0.512V
    # gain = 256 # +/- 0.256V
    
    # Select the sample rate
    # sps = 8 # 8 samples per second
    # sps = 16 # 16 samples per second
    # sps = 32 # 32 samples per second
    # sps = 64 # 64 samples per second
    # sps = 128 # 128 samples per second
    sps = 250 # 250 samples per second
    # sps = 475 # 475 samples per second
    # sps = 860 # 860 samples per second
    
    # Initialise the ADCs using the default mode (use appropriate I2C address)
    adc = ADS1x15(ic=ADS1115)
    #adc2 = ADS1x15(ic=ADS1115, address=0x49)
    #adc3 = ADS1x15(ic=ADS1115, address=0x4a)
    
    # read analog sensor on channel Ax [0-3]
    result = adc.readADCSingleEnded(1, gain, sps) / 1000
    
    # print result
    print "MQ-2: %.6f" % (result)

    my return result is only one value for ex. 0.095875. Can you help me get those 4 values like yourself in the video (Ro, LPG, CO, smoke)?

    Regards

    Reply
  12. syeda aiman on 17. December 2017 18:20

    i am using mcp3008 with mq2. but i am facing difficulty in wiring as my mcp has only 5 pins. So I am confuse what to do now.

    Reply
    • Felix on 17. December 2017 20:45

      Probably it is no MCP3008

      Reply
    • Dave on 26. December 2017 1:27

      With only 5 pins I don’t think it could be a mcp3008. Google ‘mcp3008 datasheet’, and you’ll see that they all have the same layout. There’s a 3004 but even that has more pins than 5.

      Reply
  13. Dave on 26. December 2017 1:23

    Sorry as I’m new, but I’m unsure of how this could work. Any documentation I can find on a logic level coverter says that they canot be used for analog conversions. They are only on/off. You’d have to take the output from the sensor and divide it using 2 resistors.

    Reply
    • Felix on 27. December 2017 0:48

      That’s why we use the MCP3008 Analog Digital Converter.

      Reply
  14. Meems on 24. January 2018 22:25

    I want to put an active buzzer in the project once the gas quality detected by the sensor get too high. In what part should I put the code for the buzzer?

    Reply
  15. brian burroughs on 26. January 2018 15:10

    have you a better diagram? mine aborts straight after running it.

    Im not sure if i wired the vcc right, were you two red wires merge into one, I placed my sensor in the board and have the two wires in the same row as the vcc connection of the sensor

    Reply
  16. brian burroughs on 26. January 2018 15:22

    got it working, had the mcp3008 backwards

    Reply
  17. anand on 31. January 2018 6:56

    Hii frds iam anand….iam using mq135 sensor….i read the value from the sensor by raspberry but I want to sent the data to cloud…and I want sent msg to the particular person…so guys help me
    My mail
    Krishnan10497kmb@gmail.com

    Reply
  18. andrea on 5. February 2018 0:19

    el conversor de nivel logico lo conectan a la salida de dato analogo o digital?

    Reply
  19. Pazliquigan on 16. February 2018 2:25

    Hello Everyone.. Can you help us with our Capstone we are using a MQ-6 instead of MQ-2 is it posible that it had a the same output later? Thanks in advance

    Reply
    • Felix on 16. February 2018 16:56

      Should be the same, but you have to adjust the formula!

      Reply
      • Paz on 25. March 2018 20:40

        Press CTRL+C to abort.
        Calibrating…

        abort by user

        and im using mq6 sensor
        i got an error from this line of code can you please help me?
        def MQResistanceCalculation(self, raw_adc):
        return float(self.RL_VALUE*(1023.0-raw_adc))/float(raw_adc);

      • tripura on 11. June 2019 9:01

        plz suggest the code ,where we have to update

      • Doubra on 29. October 2019 9:11

        I’m using MQ135 please what do I adjust in the formulae. Also without the Logic Level Connverter could it work?

  20. Christian on 5. March 2018 6:20

    Do you have codes please programming my mq 5 gas sensor to python using raspberry pi? Need much help about it.

    Reply
    • Felix on 7. March 2018 22:44

      You can create it by using the datasheet. I have shown the way how the calculation works 🙂

      Reply
  21. Jennifer on 7. March 2018 20:28

    Hi, I’m using an MQ135 and the only output I am seeing at the moment is:
    Press CTRL+C to abort.

    Abort by user
    Is anyone experiencing something similar?
    Thanks

    Reply
    • Felix on 7. March 2018 22:43

      There is probably some exception thrown. You could log it to find out more.

      Reply
      • vikram on 27. March 2019 8:33

        how can i log out

    • MOHD IDHAM BIN PODANG on 8. October 2018 18:39

      have u solve ur problem?

      Reply
    • Dipendra B.C on 20. April 2019 10:32

      I am also experiencing the same issue. Have you got any solutions??

      Reply
  22. syauqi on 8. March 2018 7:49

    im using mq-2
    output i get

    Press CTRL+C to abort.
    Calibrating…

    Abort by user

    Reply
  23. syeda aiman on 11. March 2018 10:57

    may i connect 5v or 3.3v of pi with sensor mq2 and
    im using mq-2
    output i get

    Press CTRL+C to abort.
    Calibrating…

    Abort by user

    Reply
    • Felix on 11. March 2018 22:10

      Just log the exception.

      Reply
      • pieter fraser on 12. March 2018 15:21

        how?

      • Felix on 12. March 2018 19:57

        print()

  24. anarchist18 on 14. March 2018 21:03

    I have everything setup like in the tutorial, I’ve enabled exception logging in python:
    Press CTRL+C to abort.
    Calibrating…
    ERROR:root:message
    Traceback (most recent call last):
    File “example.py”, line 7, in
    mq = MQ();
    File “/root/Raspberry-Pi-Gas-Sensor-MQ/mq.py”, line 48, in __init__
    self.Ro = self.MQCalibration(self.MQ_PIN)
    File “/root/Raspberry-Pi-Gas-Sensor-MQ/mq.py”, line 83, in MQCalibration
    val += self.MQResistanceCalculation(self.adc.read(mq_pin))
    File “/root/Raspberry-Pi-Gas-Sensor-MQ/mq.py”, line 69, in MQResistanceCalculation
    return float(self.RL_VALUE*(1023.0-raw_adc)/float(raw_adc));
    ZeroDivisionError: float division by zero

    Any ideas?

    Reply
    • Felix on 17. March 2018 18:31

      Your ADC gives values of zero back, so probably there is something wront (check connections and read the value per hand)

      Reply
      • Laxman on 9. February 2020 10:08

        I checked it but my mcp3008 giving some value but still facing same issue plz

  25. Sunny on 16. March 2018 13:03

    Hi, i was getting error while running this code, so i commented the try and except,and started from while True:

    after executing i got this error

    Press CTRL+C to abort.
    Calibrating…
    Traceback (most recent call last):
    File “example.py”, line 7, in
    mq = MQ();
    File “/home/pi/Desktop/Raspberry-Pi-Gas-Sensor-MQ/mq.py”, line 48, in __init__
    self.Ro = self.MQCalibration(self.MQ_PIN)
    File “/home/pi/Desktop/Raspberry-Pi-Gas-Sensor-MQ/mq.py”, line 83, in MQCalibration
    val += self.MQResistanceCalculation(self.adc.read(mq_pin))
    File “/home/pi/Desktop/Raspberry-Pi-Gas-Sensor-MQ/mq.py”, line 69, in MQResistanceCalculation
    return float(self.RL_VALUE*(1023.0-raw_adc)/float(raw_adc));
    ZeroDivisionError: float division by zero

    Reply
    • Felix on 17. March 2018 18:31

      Your ADC gives values of zero back, so probably there is something wront (check connections and read the value per hand)

      Reply
      • Sunny on 19. March 2018 8:42

        with mcp3008 library my ADC is giving output

      • Felix on 19. March 2018 21:49

        You can replace it by the other library.

      • Sunny on 19. March 2018 8:43

        but with the code provided here, it is giving errors

      • Piotr Filarski on 8. October 2018 21:30

        Sunny have you fixed it?

      • SB on 16. November 2018 8:08

        I am getting the same error. I checked ADS1115 output and it is giving values for all 4 channels. Sample output mentioned here. But when running MQ2 example.py, it is giving same error. Please suggest how to check the signal coming from MQ2 sensor to ADS1115 is Ok.
        | 0 | 1 | 2 | 3 |
        ————————————-
        | 11516 | 4608 | 4793 | 4954 |
        | 11507 | 4832 | 4444 | 4941 |
        | 11502 | 4831 | 4450 | 4937 |
        | 11480 | 4773 | 4615 | 4641 |
        | 11529 | 4522 | 4827 | 4467 |
        | 11487 | 4485 | 4859 | 4375 |
        | 11515 | 4483 | 4863 | 4374 |
        | 11487 | 4491 | 4829 | 4481 |
        | 11499 | 4645 | 4744 | 4550 |
        | 11474 | 4751 | 4497 | 4926 |
        | 11461 | 4839 | 4443 | 4932 |
        | 11471 | 4844 | 4435 | 4961 |
        | 11497 | 4837 | 4440 | 4957 |
        | 11472 | 4819 | 4501 | 4789 |
        | 11497 | 4669 | 4628 | 4751 |

  26. Jonas on 20. March 2018 13:21

    Hey, i ran the code and got

    Press CTRL+C to abort.

    Abort by user

    then i tried to log the exception to figure out why it is not calibrating and than i got this error, pls help

    Press CTRL+C to abort.

    Abort by user
    ERROR:root:message
    Traceback (most recent call last):
    File “/home/pi/Raspberry-Pi-Gas-Sensor-MQ/example.py”, line 8, in
    mq = MQ();
    File “/home/pi/Raspberry-Pi-Gas-Sensor-MQ/mq.py”, line 32, in __init__
    self.adc = MCP3008()
    File “/home/pi/Raspberry-Pi-Gas-Sensor-MQ/MCP3008.py”, line 7, in __init__
    self.open()
    File “/home/pi/Raspberry-Pi-Gas-Sensor-MQ/MCP3008.py”, line 10, in open
    self.spi.open(self.bus, self.device)
    FileNotFoundError: [Errno 2] No such file or directory

    Reply
    • Tinashe on 20. March 2018 21:47

      I also have the same problem please assist.

      Reply
    • Tinashe on 20. March 2018 22:50

      Hie you need to enable the SPI interface. You can just google on how to do that

      Reply
  27. ElDiller on 21. March 2018 23:22

    HI Felix thanks for your help and support. I.m having this errrr can you please help me..
    pi@raspberrypi:~/Desktop/MQ2/Raspberry-Pi-Gas-Sensor-MQ $ sudo python example.pyPress CTRL+C to abort.
    Traceback (most recent call last):
    File “example.py”, line 14, in
    mq = MQ();
    File “/home/pi/Desktop/MQ2/Raspberry-Pi-Gas-Sensor-MQ/mq.py”, line 32, in __init__
    self.adc = MCP3008()
    File “/home/pi/Desktop/MQ2/Raspberry-Pi-Gas-Sensor-MQ/MCP3008.py”, line 7, in __init__
    self.open()
    File “/home/pi/Desktop/MQ2/Raspberry-Pi-Gas-Sensor-MQ/MCP3008.py”, line 10, in open
    self.spi.open(self.bus, self.device)
    IOError: [Errno 2] No such file or directory

    Thanks in advance..

    Reply
    • Felix on 22. March 2018 0:36

      You have not enabled SPI or not installed SpiDev.

      Reply
    • Shubham on 23. March 2018 19:36

      see this repo https://github.com/shubham0490/MQ-sensor-ppm-conversion

      Reply
  28. Shubham on 23. March 2018 19:34

    Hi, i was also getting the same errors but i have found the solution for this, check this link
    https://github.com/shubham0490/MQ-sensor-ppm-conversion
    There is problem with the library, install the adafruit library and the code which is in link will work fine

    Reply
    • ElDiller on 25. March 2018 0:28

      thanks to both, I had several problems like not enabling the SPI but it still does not work, I’m trying now the other URL, thank you very much.

      Reply
      • ElDiller on 25. March 2018 0:59

        New error
        Press CTRL+C to abort.
        Calibrating…
        Traceback (most recent call last):
        File “/home/pi/Desktop/MQ2/Raspberry-Pi-Gas-Sensor-MQ/examplewithdebug.py”, line 14, in
        mq = MQ();
        File “/home/pi/Desktop/MQ2/Raspberry-Pi-Gas-Sensor-MQ/mq.py”, line 48, in __init__
        self.Ro = self.MQCalibration(self.MQ_PIN)
        File “/home/pi/Desktop/MQ2/Raspberry-Pi-Gas-Sensor-MQ/mq.py”, line 83, in MQCalibration
        val += self.MQResistanceCalculation(self.adc.read(mq_pin))
        File “/home/pi/Desktop/MQ2/Raspberry-Pi-Gas-Sensor-MQ/mq.py”, line 69, in MQResistanceCalculation
        return float(self.RL_VALUE*(1023.0-raw_adc)/float(raw_adc));
        ZeroDivisionError: float division by zero

    • SB on 13. November 2018 12:49

      I am facing the same problem and did not find specific solution for float division by zero error. Any suggestion is highly appreciated

      Reply
  29. ElDiller on 25. March 2018 1:05

    ADC checked ..can you please confirm used port are 19,21,23 and 24_?

    Reply
  30. Shubham on 26. March 2018 9:46

    have you installed the Adafruit library? yup these ports are confirmed, i have also updated the github readme on this with videos

    Reply
  31. Shubham on 27. March 2018 9:45

    for pins refer to https://pinout.xyz

    Reply
  32. Faiz Mokti on 28. March 2018 6:38

    Press CTRL+C to abort.

    Abort by user

    the result after i run the example.py
    any help?
    im using putty

    Reply
  33. saad on 28. March 2018 14:26

    can i connect MQ-5 gas sensor to raspberry pi ? if yes can u pls show me the circuit ?

    Reply
    • Felix on 28. March 2018 21:28

      Yes, the circuit is the same (use the analog output pin).

      Reply
      • qwertzuiop on 7. April 2018 14:23

        but it does not work

  34. Keelan on 29. March 2018 16:46

    Hello,
    when I run the program it is immediately aborting by user after printing calibrating.
    I have rebuilt the device a few times with different parts to minimize the potential for a broken piece. The errors that keep appearing are blank read adc values, no calibration and spi not available even though SpiDev has been enabled. while trying to run the program in Thonny IDE on the Pi, Errors keep appearing on lines 49,72, and 89. Any help would be greatly appreciated!

    Reply
    • Keelan on 29. March 2018 23:15

      Turns out I had the ADC chip in backwards. The values are now starting to populate but the program will now randomly exit after only displaying values for a second or two.

      Reply
      • Faiz Mokti on 1. April 2018 9:51

        how did you do it

  35. Faiz Mokti on 1. April 2018 9:56

    this is my output
    Press CTRL+C to abort.
    Calibrating…

    Abort by user

    how to solve this

    Reply
    • vijaya on 22. January 2019 15:44

      hello sir, had you got solution for this problem, i am also facing the same problem. could you suggest me sir!

      Reply
  36. Svetlin on 5. April 2018 18:28

    Thank you Felix for this awesome tutorial, it helped me a lot! I admire your patience to answer all these Googleable questions.

    Reply
  37. shreya on 11. April 2018 11:26

    Please help me with sensor MQ135 & MQ7. I need for my project work. Any type of help is appreciated. ? shreyaghoradkar@gmail.com

    Reply
  38. osmanys on 13. April 2018 5:02

    i have problems
    debugger
    ‘mq’._init_(), line 32:self.adc=MCP3008()
    ‘MCP3008’._init_(), line 7: self.spi.max_speed_hz=1000000 #1MHz
    please i need help

    Reply
  39. Osmanys on 22. April 2018 3:07

    Como puedo conectar dos sensores mq al mismo raspberry pido saludos y gracias

    Reply
  40. Hemal on 23. April 2018 2:29

    unbound method read() must be called with MCP3008 instance as first argument (got int instance instead)

    this is the error im getting what could be the fix

    Reply
  41. hemal on 23. April 2018 2:30

    unbound method read() must be called with MCP3008 instance as first argument (got int instance instead)

    this is the problem im having

    Reply
  42. ElDiller on 23. April 2018 4:44

    Hi … I tell you that thanks to you my sensor works. My new question is. how could i conect another sensor, could it be done conecting it to other gate on the same to mc3008 gate, how should i modified the code .. some idea or suggestion

    Reply
  43. chuong on 26. April 2018 1:53

    Why don’t you use the digital output from the mq-2 sensor; but use the analog output + ADC?

    Reply
    • JeffD on 19. September 2018 18:17

      Was just researching this as well, looks like the DO will only alert if gas is detected and wont give you specific values. You can only measure the amount of gas using analog output + converter

      Reply
  44. Osmanys on 28. April 2018 2:02

    How can I change the configuration of the pins where the sensor is connected

    Reply
  45. Osmanys on 28. April 2018 2:04

    How can I connect two mq sensors to the same raspberry pi, please can someone help me with the code, thanks

    Reply
  46. JAY on 20. May 2018 16:54

    May i know how can you get the value of P1 (x = 200, y = ~ 1.62) —–1.62 from the datasheet?

    Reply
    • Osmanys on 20. May 2018 22:51

      that result is from the table in the datasheet

      Reply
  47. richard on 30. May 2018 11:50

    I am trying to setup a MQ-4 measuring Methane

    self.CH4Curve = [2.3,0.24,-0.55] … my Winsen MQ-4 sensor spec indicates lg200 is 0.24 and lg10000 is 0.027 …through wolfram I get ( Log10(0.027) – log10(0.24) ) / ( log10(10000) – log10(200) ) = -0.558

    how did you get the 2.3 value ?

    Reply
  48. Noor khokhar on 29. June 2018 11:01

    any one have code mq-135 sensor with pi In python code.

    Reply
  49. vishnu on 29. June 2018 19:21

    mq2 gas sensor can detect acetylene?
    can you please suggest one to identify it.

    Reply
  50. Noor khokhar on 2. July 2018 12:03

    why we used MCP3008? i saw mq-135 sensor have already digital pin why we cannot direct digital pin.

    Reply
    • Veli on 21. February 2019 18:30

      That digital pin is not a serial communication pin. On the sensor’s circuit board, there is a potentiometer setting a threshold value. If analog output is above that threshold value, digital output becomes high. If analog output is below that threshold value, digital output becomes low.

      This feature is for some basic diy circuits. For example, you can connect a LED to digital output pin. (There is a LED on the circuit board already 🙂 ) And you can set the potentiometer to a value that LED does not turns ON, in a clean air. If air goes bad (or whatever you name the situation), LED will turn ON after a gas density, depending your setting on potentiometer.

      Reply
  51. Gurmeet Singh on 23. July 2018 19:25

    Hello sir,
    I love this project and i want to make this project. You explain everything in this video but could you please provide me schematic diagram of this project?

    Reply
  52. marl on 7. August 2018 17:36

    i know the equation for -0.47

    but

    how do you get (x = 2.3, y = 0.21)?

    Reply
  53. nikko on 23. August 2018 6:56

    hello sir how will we get the slope for the given x and y?

    Reply
  54. Stas on 25. September 2018 19:07

    How about gas sensor for ethylene? is there any?

    Reply
    • Adrian on 5. September 2019 15:28

      I am also interested in an ethylene gas sensor or one that at the very least has cross sensitivity.

      Reply
  55. Invenisso on 3. October 2018 22:04

    My Ro=-0.213053 kohm. What’s wrong?

    Reply
    • peter on 5. December 2019 20:42

      did you find a solution. I have same problem.

      Reply
  56. Aashit Garodia on 26. October 2018 10:30

    Can you please explain me the code or If I can find the code explanation anywhere? Please help, have already googled everything about spidev.

    from spidev import SpiDev

    class MCP3008:
    def __init__(self, bus = 0, device = 0):
    self.bus, self.device = bus, device
    self.spi = SpiDev()
    self.open()
    self.spi.max_speed_hz = 1000000 # 1MHz

    def open(self):
    self.spi.open(self.bus, self.device)
    self.spi.max_speed_hz = 1000000 # 1MHz

    def read(self, channel = 0):
    cmd1 = 4 | 2 | (( channel & 4) >> 2)
    cmd2 = (channel & 3) << 6

    adc = self.spi.xfer2([cmd1, cmd2, 0])
    data = ((adc[1] & 15) << 8) + adc[2]
    return data

    def close(self):
    self.spi.close()

    and if possible help me with this code too
    https://github.com/tutRPi/Raspberry-Pi-Gas-Sensor-MQ/blob/master/mq.py

    Reply
    • Shreyansh on 22. February 2019 6:35

      Did you get it?

      Reply
  57. Aashit Garodia on 26. October 2018 10:34

    specifically this part of code:
    cmd1 = 4 | 2 | (( channel & 4) >> 2)
    cmd2 = (channel & 3) << 6

    adc = self.spi.xfer2([cmd1, cmd2, 0])
    data = ((adc[1] & 15) << 8) + adc[2]

    PLEASE HELP

    Reply
  58. Theerapong on 13. November 2018 18:00

    This estimation of Rs/Ro from datasheet come with Big number of Error.

    Reply
  59. CMFR on 30. January 2019 21:51

    If I have a sensehat will I still be able to attach this or will I have to remove the sensehat? Is there some way to extend the pins or something?

    Reply
  60. vijaya on 11. February 2019 10:50

    Press CTRL+C to abort.
    Calibrating…
    Traceback (most recent call last):
    File “/home/pi/Raspberry-Pi-Gas-Sensor-MQ/example.py”, line 5, in
    mq = MQ();
    File “/home/pi/Raspberry-Pi-Gas-Sensor-MQ/mq.py”, line 45, in __init__
    self.Ro = self.MQCalibration(self.MQ_PIN)
    File “/home/pi/Raspberry-Pi-Gas-Sensor-MQ/mq.py”, line 80, in MQCalibration
    val += self.MQResistanceCalculation(self.adc.read(mq_pin))
    File “/home/pi/Raspberry-Pi-Gas-Sensor-MQ/mq.py”, line 66, in MQResistanceCalculation
    return float(self.RL_VALUE*(1023.0-raw_adc)/float(raw_adc));
    ZeroDivisionError: float division by zero

    Reply
    • Veli on 21. February 2019 18:24

      Your ADC might be returning 4095.0 instead of 1023.0 for Maximum Analog Voltage, as in my case. First, connect 3.3 V to your channel 0 and print the ADC read value to the screen. After realizing a value ~4095, you should replace 1023.0 with 4095.0

      Reply
      • Shreyansh on 22. February 2019 6:46

        Channel 0 is connected to RX0. So should we remove that connection?

      • Veli on 25. February 2019 15:42

        You just need to test the digital value which is generated by the software and hardware both. You can use any of the ADC’s channels. You should connect a line(cable, etc, whatevery you call) to an ADC pin at a time.

        For your specific question: Yes you should remove that to measure the correct value.

  61. Brady on 20. February 2019 16:53

    Did you find solution for negative Ro? I am having similar results with gases not being detected.

    Reply
  62. Veli on 21. February 2019 18:21

    Hi,
    I realized that there is a little mistake on the code. In python math.log() takes log on base 2, not on base 10. math.log10() should be used for log based on 10.

    “`
    def MQGetPercentage(self, rs_ro_ratio, pcurve):
    return (math.pow(10,( ((math.log(rs_ro_ratio)-pcurve[1])/ pcurve[2]) + pcurve[0])))
    “`
    Therefore the code above should be updated as like the below.

    “`
    def MQGetPercentage(self, rs_ro_ratio, pcurve):
    return (math.pow(10,( ((math.log10(rs_ro_ratio)-pcurve[1])/ pcurve[2]) + pcurve[0])))
    “`

    Reply
    • Shreyansh on 22. February 2019 7:09

      Hi,
      I am doing this project with mq135. However when i print adc in the following code
      def read(self, channel = 0):
      cmd1 = 4 | 2 | (( channel & 4) >> 2)
      cmd2 = (channel & 3) << 6

      adc = self.spi.xfer2([cmd1, cmd2, 0])
      print(adc)
      data = ((adc[1] & 15) << 8) + adc[2]
      return data
      I get a list of 0 like[0 0 0]. Due to this I am getting a divided by 0 error. What can I do to resolve it?

      Reply
      • Veli on 25. February 2019 15:48

        Could you please check your connections? Do not forget ALL OF THE 8 pins of MCP3008 which are on the opposite side of the channel pins. After being sure of this, check return value again. If the problem still occurs, instead of sensor output, connect 3.3 V to a channel and check the printed value again.

    • dewi on 12. February 2020 5:02

      how is its gonna be only 1 curve ? i’m using TGS how the code “def … percentage” should be ?

      Reply
  63. Veli on 25. February 2019 15:49

    “ALL OF THE 8 pins of MCP3008 which are on the opposite side of the channel pins” should be connected. Do not skip any of them.

    Reply
  64. Shreyansh on 13. March 2019 13:05

    Hi,
    Thanks for you help.
    I checked for the values after connecting 3.3V I was getting 1023 constantly. Yet the program is aborting

    Reply
  65. Dan on 13. March 2019 13:11

    I followed all the steps and when I type sudo python example.py it says abort by user even though I did not abort. How can this be fixed?

    Reply
  66. Harish Sakthi on 24. March 2019 16:10

    I am trying to do a project where I am utilizing multiple gas sensors. I know that the MCP3008 can support 8 devices at once, but I have read in forums that the Raspberry Pi can only handle 2 SPI slaves. I have made gas sensors multiple circuits utilizing one MCP3008 and TTL, so will that work? (They are soldered circuits). I have already utilized one of those circuits and that works fine. I have a GPIO expansion board with three GPIO pin headers, so I have 120 pins to utilize, all with the same layout as the normal pin header. If not, could I connect 8 sensors to one MCP3008? And what kind of changes would I need to make to MCP3008?

    Reply
  67. Harish Sakthi on 24. March 2019 16:13

    Sorry, I meant MCP3008.py.

    Reply
  68. Manj on 29. March 2019 8:03

    “Abort by user” is being displayed. Anything you can help?

    Reply
    • Giovanni on 30. April 2019 11:55

      I have the same problem. Have you solved?

      Reply
      • Laxmam on 9. February 2020 10:18

        Have u got the solution plz contact me
        On this email laxmanrathod455@gmail.com

  69. pec on 7. April 2019 10:35

    I’m trying to understand why logic level converter is needed between ADC (MCP3008) and MQ sensor.

    according to this comment
    https://www.raspberrypi.org/forums/viewtopic.php?t=189209#p1191345
    there is no need for that and IMHO this comment makes sense.

    Reply
  70. Bernhard on 1. May 2019 23:16

    Hi, I’m just try to get it running.
    The error-messages say, that “no module named spidev”
    Ok, I checked that on the net, using
    mkdir python-spi
    cd python-spi
    wget https://raw.github.com/doceme/py-spidev/master/setup.py
    wget https://raw.github.com/doceme/py-spidev/master/spidev_module.c sudo python setup.py install

    ending up with the following message:
    Traceback (most recent call last):
    File “setup.py”, line 29, in
    long_description= open(‘README.md’).read() + “n” + open(‘CHANGELOG.md’).read(),
    IOError: [Errno 2] No such file or directory: ‘README.md’

    Unfortunately I did not find a suitable solution on the net.

    Do you have any suggestions?

    Best regards

    B.

    Reply
  71. Aju Varghese Antony on 8. May 2019 9:56

    Hi,
    I am using ARPI600 on my RPI as ADC, can you tell me what changes I will have to make for MQ-137 and MQ-135 to get it work?
    It will be of great help

    arpi600 https://www.waveshare.com/wiki/ARPI600

    Reply
  72. Shrikanth Singh on 24. June 2019 9:53

    Does the code work for Python 3 too?

    Reply
    • lghtrr on 21. February 2020 11:25

      i use it too and it’s work

      Reply
  73. marco on 10. October 2019 14:57

    from the python code is calculated only GAS LNG, CO and SMOKE, to get the values ​​of others (H2, air, propane, alcohol, etc.) is it enough to add in the class class MQ () the calculated points?

    Reply
  74. Colleen on 11. October 2019 16:13

    It worked for me! Thank you so much. Is it possible though to have Mathematica read off the sensor (instead of concentration displaying in the terminal?) Thanks!

    Reply
  75. nemo on 26. November 2019 7:00

    I followed all the steps given but why does the value of resistance is negative?

    Press CTRL+C to abort.
    Calibrating…
    Calibration is done…

    Ro=-0.231164 kohm

    LPG: 0.0076744 ppm, CO: 0.00497707 ppm, Smoke: 0.0204785 ppm

    and there is no change on the value when I spray some lighter gas on the sensor

    Reply
    • peter on 5. December 2019 20:52

      I encounter the same problem. when gas/smoke is added, the values go down! Must be something in “example.py”?
      Ro=-0.247752
      LPG: 0.00542804 ppm, CO: 0.00308366 ppm, Smoke: 0.0141463 ppm

      Reply
    • peter on 5. December 2019 20:53

      I encounter the same problem. when gas/smoke is added, the values go down! Must be something in “example.py”?
      Ro=-0.247752

      Reply
      • Laxman on 9. February 2020 10:24

        Hi bro I also refer the same git hub code but I am facing divide by zero. Error exception
        As u said you are getting some value atleast plz contact me or help me
        Thanks is advance
        On this email id
        laxmanrathod455@gmail.com

  76. FatihN on 14. December 2019 18:46

    I’m getting error on MQ-5

    Press CTRL+C to abort.
    Calibrating…
    float division by zero

    Why?

    Reply
  77. Alexander Schmid on 19. December 2019 18:18

    Hi! First: THANK YOU VERY MUCH for your great work!

    I was using your wiring and code with a MQ-5 and it worked fine! However, when I changed the MQ-5 with a MQ-2 – the same sensor you are using – I get a strange behaviour: LPG and CO values drop when the sensor is exposed to LPG / CO instead of rising which means, the values are going down to an e-05 value… Do you have any explanation for this? Do I need to do a 1 / [value] calculation to correct that?

    THANK YOU!

    Reply
    • Alexander Schmid on 19. December 2019 18:19

      (and yes, I already tried another MQ-2 sensor)

      Reply
  78. gas detector on 26. December 2019 6:47

    Thanks for having this article, it helps a lot. It’s a well-written blog and it is very informative. Keep on blogging, looking forward to see more of your posts!

    Reply
  79. Naveen on 29. January 2020 6:56

    Hi, actually i am using raspberry pi 3b+
    i need a help on MQ3 and ADC
    How to install and how to run the program….?

    Reply
  80. Ching on 31. January 2020 17:32

    Hiii, does anyone know how to get (x=2.3, y=0.21) for the calibration?

    Reply
    • Ching on 31. January 2020 17:39

      ooo silly me! its log(200)=2.3 and log(1.62)=0.21

      Reply
  81. Abhishek Das on 17. March 2020 10:23

    Please help the code is showing this error while logging the exception
    Press CTRL+C to abort.
    Calibrating…
    ERROR:root:
    Abort by user
    Traceback (most recent call last):
    File “/home/pi/Documents/a/r/example.py”, line 8, in
    mq = MQ();
    File “/home/pi/Documents/a/r/mq.py”, line 48, in __init__
    self.Ro = self.MQCalibration(self.MQ_PIN)
    File “/home/pi/Documents/a/r/mq.py”, line 83, in MQCalibration
    val += self.MQResistanceCalculation(self.adc.read(mq_pin))
    File “/home/pi/Documents/a/r/mq.py”, line 69, in MQResistanceCalculation
    return float(self.RL_VALUE*(1023.0-raw_adc)/float(raw_adc));
    ZeroDivisionError: float division by zero

    Reply
  82. alex on 17. May 2020 1:41

    can i not using the voltage converter?

    Reply
    • Felix on 17. May 2020 1:48

      What do you mean?

      Reply
    • Julien on 29. August 2020 17:43

      I agree with you.
      I don’t understand the voltage converter role.

      Reply
  83. dewi on 9. June 2020 13:33

    hei felix. how is its gonna be only 1 curve ? i’m using TGS how the code “def … percentage” should be ? The value just show Ro if i delete 2 other curve

    Reply
    • Felix on 9. June 2020 18:53

      Hi Dewi
      regarding the datasheet, with one value, we can read out all three values for the gases.

      Reply
  84. Julien on 5. August 2020 0:36

    Hi,
    you mention the I2C bus in the article but you’ve used the SPI bus in the Python code.
    Why ? Is the SPI bus is better than the I2C.
    Which one to prefer ?

    Reply
  85. Joey on 5. August 2020 14:42

    Hi,
    I don´t know where to find the MCP3008 library. Can you help me please?

    Reply
  86. Julien on 5. August 2020 18:37

    Hi,
    I have the ads1115 ADC instead of the MCP3008. I want to connect it two analog devices.
    Is it better to connect devices on a single ADC or one ADC per device must be wired ?
    Thanks

    Reply
  87. Bomma on 10. August 2020 18:13

    Hi, I follow all the steps as shown in the video but I am stuck after enter the example.py, it just showing me Ctrl + C to abort without calibrating… Anyone can help me with this?

    Reply
  88. hello Mr. https://www.google.com/?googlegooglegooglegooglegooglegooglegooglegooglegooglegoogle 1 on 26. August 2020 12:27

    mesropgugeseva@mail.ru

    Reply
  89. Julien on 29. August 2020 17:41

    Hello,

    I don’t understand the role of the TTL, and don’t understand the phrase “In this example, we use a 5V voltage as output. This is too much for the GPIOs, which is why we use a logic level converter (TTL) that cuts down the voltage.”

    If i understand, the input value of the Raspberry is a numeric value because the Raspberry can’t read analog value.
    So, what is the voltage you send to the Raspberry ?
    At the output of the ADC is necessarily a numeric, right ? So what is the limit of 5V ? there is no analog value between the ADC and the Raspberry, right ?

    Thanks

    Reply
  90. Renato Gallo on 6. September 2020 10:53

    looking at the image… where must I connect the yellow cable?

    Reply
  91. Renato Gallo on 6. September 2020 10:54

    how’s the wiring if I have this waveshare hat?

    https://www.waveshare.com/wiki/High-Precision_AD/DA_Board

    Reply
  92. Carlos on 25. September 2020 3:25

    Hello friends, someone has the values ​​for the mq-3 sensor with mcp3008. I am new to programming. I thank you very much.

    Reply
    • Mike on 21. September 2021 20:53

      Did you ever find them?

      Reply
  93. De Wilde Quinten on 4. October 2020 14:20

    Is there a code example to get this to work with the ads1115??

    I’m stuck because I’m not using the same ADC…

    Reply
  94. Euihyun Han on 21. October 2020 14:36

    Hi, I have a simple question.
    As you mentioned, we need two points on the graph for calibration.
    How can we know the exact coordinates like (200, 1.62), (10000, 0.26)?
    Datasheets only give the figure of the graph, not the exact values. So, it’s a bit confusing to me what numbers I should use.
    Thank you in advance!

    Reply
  95. Krishna on 27. January 2021 18:47

    Can I use PCF8591 Module in place of (MCP3008 ADC + 3.3v 5v I2C logic level converter)?
    Kindly someone confirm?

    Reply
  96. adam on 22. June 2021 7:27

    i kept getting abort by user
    do i need to rearrange the whole connection back or what?

    Reply
  97. hipsy on 21. September 2021 20:20

    Hi felix! Thank you for this. I tried on MQ135 changing the values from the datasheet and it worked. I wonder where did you get Ro=3.46 tho? my values were 25000 ppm above. Thank you, any help is appreciated.

    Reply
    • hipsy on 21. September 2021 20:48

      actually i just tried it again, and it gave me negative value for Ro and 0.0000x for the ppm

      Reply
    • haru on 14. November 2021 14:03

      I get the same -Ro , I don’t know what’s wrong.

      Reply
      • haru on 14. November 2021 14:04

        I get the same -Ro , I don’t know what’s wrong.

  98. sreer on 24. September 2021 22:59

    how do you connect 2 mq sensors? just follow the pins like your example and connect to analog pin 1 of mcp3008? how about the code?

    Reply
  99. jonathan e SMITH on 9. November 2021 17:15

    Just an FYI This library only supports Smoke, CO and Propane. For methane etc you need look elsewhere.

    Reply

Leave A Reply Cancel Reply

Review of the 7″ Raspberry Pi Touchscreen Display

Log Raspberry Pi sensor data with ThingSpeak and analyze it

Raspberry Pi Servo Motor control

NodeMCU: Supply ESP8266 with Solar Cell and Battery with Power

Develop Your Own Raspberry Pi Alexa Skill and Control Pi Remotely

Wireless communication between Raspberry Pi’s via MQTT broker/client

Subscribe to Blog
Subscribe to Raspberry Pi Tutorials and don't miss any new Tutorial!
Subscribe

Thank you!

We will contact you soon.

Tutorials for Raspberry Pi
Facebook Twitter YouTube
  • Contact & Disclaimer

Type above and press Enter to search. Press Esc to cancel.