Welcome to the Pycom forum Forum
    • \[\[global:header.categories\]\]
    • \[\[global:header.recent\]\]
    • \[\[global:header.tags\]\]
    • \[\[global:header.popular\]\]
    • Login

    Explore Pybytes | Official Documentation | Report a Firmware Bug/Issue | GitHub

    BME280 on the LoPy

    Scheduled Pinned Locked Moved Issues & Bugs
    bme280lopyi2c
    41 Posts 12 Posters 16.0k Views 12 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • B Offline
      Butch @ledbelly2142
      last edited by

      @ledbelly2142 Try following the line of logic I tried in the python REPL: import, instantiate, and initialize:

      >>> from machine import I2C
      >>> import bme280
      >>> i2c = I2C(0, I2C.MASTER, baudrate=100000)
      >>> bme = bme280.BME280(i2c=i2c)
      

      See where that takes you.

      The original problem I ran into and ultimate fixed was that the 8- and 16-bit writes needed the value to be written to be a bytearray, not the raw value. Beyond that, all I added was a wrapper for altitude.

      ledbelly2142L 1 Reply Last reply Reply Quote 0
      • ledbelly2142L Offline
        ledbelly2142 @Butch
        last edited by ledbelly2142

        @Butch

        For me, the issue comes up from :
        bme = bme280.BME280(i2c=i2c)

        Thats where I get the errors indicating an I2C bus error.

        I SDA on pin 9 and SCL on pin 10.

        Could it be a bad sensor?

        So I unplugged the BME280 sensor and got the same error.

        Friends don't let friends run with scissors

        B 1 Reply Last reply Reply Quote 0
        • B Offline
          Butch @ledbelly2142
          last edited by

          @ledbelly2142 It's possible that it's a bad sensor. Do you have another one to try? You might also check to make sure that i2c.scan() is returning the same address that is used in the BME280 library. If it isn't, you'll have to change the address in the library.

          ledbelly2142L 1 Reply Last reply Reply Quote 0
          • ledbelly2142L Offline
            ledbelly2142 @Butch
            last edited by

            @Butch
            That looks to be it. The I2C address was 77, not 76... weird. I did not think to check the I2C address.

            Thanks!

            Friends don't let friends run with scissors

            1 Reply Last reply Reply Quote 0
            • D Offline
              Devang Sharma
              last edited by Devang Sharma

              Hello Everyone,
              I'm using LoPy and I've got the similar type of error as @binux got.

              I'm getting the following error:
              0_1507818167256_error1.png

              This is my code:
              0_1507818190356_code1.png

              Please guide me solving this!
              Thank You.

              robert-hhR 1 Reply Last reply Reply Quote 0
              • robert-hhR Offline
                robert-hh @Devang Sharma
                last edited by

                @devang-sharma The required positional argument is 'little' in the call of from_bytes(). The API was changed a while ago. You have to modify the script BM280.py into:

                        result = int.from_bytes(
                            self._i2c.readfrom_mem(self._address, register, 2), little) & 0xFFFF
                

                The same in function readU8().

                D 1 Reply Last reply Reply Quote 0
                • D Offline
                  Devang Sharma @robert-hh
                  last edited by

                  @robert-hh I've done changes as you said but got the NameError as:

                  "name 'little' is not defined". How can I solve it?
                  Thank You.

                  robert-hhR 1 Reply Last reply Reply Quote 0
                  • robert-hhR Offline
                    robert-hh @Devang Sharma
                    last edited by

                    @devang-sharma Sorry, it should be a string:

                            result = int.from_bytes(
                                self._i2c.readfrom_mem(self._address, register, 2), 'little') & 0xFFFF
                    
                    D 1 Reply Last reply Reply Quote 0
                    • D Offline
                      Devang Sharma @robert-hh
                      last edited by Devang Sharma

                      @robert-hh, that worked! Thanks, but the same error for write8:
                      1_1507872596119_error2.png
                      0_1507872596117_code2.png

                      Is there any link to the changed API or library? That would be better than posting every single error! :'D

                      EDIT: Solved the error. Replaced value.to_bytes(1) with "value"! No more Errors!

                      robert-hhR 1 Reply Last reply Reply Quote 0
                      • robert-hhR Offline
                        robert-hh @Devang Sharma
                        last edited by

                        @devang-sharma No specific API doc needed, since it is standard Python behaviour now. It was incompatible before, but I'm not shure, for which MicroPython version. It may be that the Pycom branch always was compatible to the Standard.
                        And yes, even in that case changes toward language compliance may break code, so it should be noted.

                        1 Reply Last reply Reply Quote 0
                        • R Offline
                          robd
                          last edited by

                          Hello,
                          There are quite a few entries on the BME280.
                          I have been reading them and I am still not able to fix my issues.
                          I have tried several of the libraries and I am just at a stand still.
                          When I do a scan of the I2C port I get 0x76 so I know that the sensor is there.
                          What I get is as follows (firmware rev 1.10.2.b1)

                          0_1512356556349_56247ec3-a520-4588-b803-29cfce44b408-image.png

                          Thank you,

                          robert-hhR 1 Reply Last reply Reply Quote 0
                          • robert-hhR Offline
                            robert-hh @robd
                            last edited by

                            @robd Actually, which bme280 code are you using at the moment? I'm a little bit lost too.

                            R 1 Reply Last reply Reply Quote 0
                            • D Offline
                              Devang Sharma
                              last edited by

                              @robd I've faced a similar issue and added argument 'little' as @robert-hh suggested which worked for me. I don't know which library you're using. But I've been using this:

                              https://github.com/LoRaWeather/BME280-LoPy-TTN/tree/master/Program/lib

                              R 1 Reply Last reply Reply Quote 0
                              • sebS Offline
                                seb
                                last edited by

                                This post is deleted!
                                1 Reply Last reply Reply Quote 0
                                • R Offline
                                  robd @Devang Sharma
                                  last edited by

                                  @devang-sharma thank you for the link. I really hate learning curves. I tried the TTN libraries and I still have issues. How are you calling the library?
                                  I am trying with (firmware version 1.10.2.b1)

                                  from machine import I2C
                                  import BME280
                                  i2c = I2C(0,I2C.MASTER, baudrate=100000)
                                  bme = bme280.BM280(i2c=i2c)

                                  print('Temp = ', bme280.temperate())

                                  the errors I am getting are
                                  0_1512438214685_1e156ce4-f907-42a4-b4fd-42e26d7d8984-image.png

                                  I then tried to see if my sensor was readable and I did

                                  from machine import I2C
                                  i2c = I2C(0, I2C.MASTER, baudrate=100000)
                                  i2c.scan()

                                  which returned 118 (0x76)
                                  then I did the following
                                  0_1512438859351_4daadb32-e396-4c98-bd3c-b1c5c68d854f-image.png

                                  Any pointers to my errors?

                                  Thank you

                                  D 1 Reply Last reply Reply Quote 0
                                  • R Offline
                                    robd @robert-hh
                                    last edited by

                                    @robert-hh I have tired several libraries, LoPy_BME280, oscarBravo-wipy_bme280, and mpy_bme280_esp8266.

                                    https://github.com/ButchAnton/LoPy_BME280
                                    https://github.com/catdog2/mpy_bme280_esp8266
                                    https://bitbucket.org/oscarBravo/wipy_bme280/src/7c03d16f48154a55a9c09af65049b0f03ef6c005?at=default

                                    and thank you to @devang-sharma
                                    https://github.com/LoRaWeather/BME280-LoPy-TTN/tree/master/Program/lib

                                    I must be doing something really wrong for nothing to work correctly.
                                    I switched over to a Si7021 and I was able to get that to work but I need to use the BME280.

                                    Thanks,

                                    1 Reply Last reply Reply Quote 0
                                    • D Offline
                                      Devang Sharma @robd
                                      last edited by

                                      @robd The first error you're getting is because of indentation of the return function. Write it within def humidity(self). I guess you're new to python, it'd be better if you read docs properly.

                                      The second error is due to the way you've used import BME280. The library has a class BME280. There are 2 ways to solve this:

                                      1. You can import it as from BME280 import * and make a constructor just after i2c something like this: bme = BME280(address=BME280_I2CADDR, i2c=i2c)

                                      OR
                                      2. keep it as import BME280 and constructor as:
                                      bme = BME280.BME280(address=BME280_I2CADDR, i2c=i2c)

                                      Make sure to use the same name as defined in the library.

                                      I hope this helps you.

                                      R 1 Reply Last reply Reply Quote 1
                                      • R Offline
                                        robd @Devang Sharma
                                        last edited by

                                        @devang-sharma the code used was from https://github.com/LoRaWeather/BME280-LoPy-TTN/tree/master/Program/lib
                                        I copied everything over as it was and didn't modify anything.
                                        The code which I tried to write and didn't work was

                                        from machine import I2C
                                        import BME280
                                        i2c = I2C(0,I2C.MASTER, baudrate=100000)

                                        print('Temp = ', BME280.temperature())

                                        Yes I am new to python and right now it is kicking me, I didn't see any docs other than small comments in the code. So it was me trying to feel around and get this sensor working.
                                        I was able to get a SI7021(different code) to work but not the BME280.
                                        I will look at and try to understand your suggestions.
                                        Thank you for your help

                                        D 1 Reply Last reply Reply Quote 0
                                        • D Offline
                                          Devang Sharma @robd
                                          last edited by

                                          @robd I think you didn't get me correctly.
                                          Anyways, try the code as below:

                                          from machine import I2C
                                          import BME280
                                          i2c = I2C(0,I2C.MASTER, baudrate=100000)
                                          bme = BME280.BME280(address=BME280_I2CADDR, i2c=i2c)
                                          print('Temp = ', bme.temperature())

                                          1 Reply Last reply Reply Quote 1
                                          • L Offline
                                            Lucas_Vieira
                                            last edited by

                                            Hello guys. i'm having similar problems here. Would you help me?

                                            from machine import I2C
                                            import bme280 # from bme280
                                            
                                            i2c = I2C(0, I2C.MASTER)             # create and init as a master
                                            i2c.init(I2C.MASTER, baudrate=10000) # init as a master
                                            i2c.scan()
                                            print(i2c.scan())
                                            bmet = []   # Lista com as temperaturas lidas com o BME280
                                            bmeh = []   # Lista com as umiadades lidas com o BME280
                                            bmep = []   # Lista com as pressoes lidas com o BME280
                                            bme = bme280.BME280(i2c=i2c, pressure_mode=bme280.OSAMPLE_8, iir=bme280.FILTER_8)
                                            bme_s = True
                                            
                                            while True:
                                                for cycles in range(10):
                                                    # Le valores BME280 com media para ter maior precisao :
                                                    numreadings = 5
                                                    samples_temperature = [0.0]*numreadings; mean_temperature = 0.0
                                                    samples_pressure = [0.0]*numreadings; mean_pressure = 0.0
                                                    samples_humidity = [0.0]*numreadings; mean_humidity = 0.0
                                                    for i in range (numreadings):
                                                        samples_temperature[i], samples_pressure[i], samples_humidity[i] = bme.values
                                                    mean_temperature = sum(samples_temperature)/len(samples_temperature)
                                                    mean_pressure = sum(samples_pressure)/len(samples_pressure)
                                                    mean_humidity = sum(samples_humidity)/len(samples_humidity)
                                                    t = mean_temperature
                                                    p = mean_pressure/101325   # Pa -> hectoPa
                                                    h = mean_humidity
                                                    bmet.append(t)
                                                    bmep.append(p)
                                                    bmeh.append(h)
                                            
                                                print(t)
                                                print(p)
                                                #print(h)
                                                time.sleep(3)
                                            

                                            My problems:
                                            erro00001.png

                                            File lib bme280:
                                            bme280.py

                                            S robert-hhR 3 Replies Last reply Reply Quote 0

                                            Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                            Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                            With your input, this post could be even better 💗

                                            Register Login
                                            • 1
                                            • 2
                                            • 3
                                            • 3 / 3
                                            • First post
                                              Last post

                                            Pycom on Twitter

                                            Pycom