• 0 Votes
    1 Posts
    101 Views
    No one has replied
  • Pysense module error

    Expansion Board pysense wipy error modules si7006a2
    3
    2
    0 Votes
    3 Posts
    344 Views
    P
    Hey. Could you try reflashing the latest firmware. Including using the checkbox to wipe flash. And reupload and try the code again. Thanks
  • Touchpad support implemented

    Enhancements esp32 touch modules enhancement
    5
    3 Votes
    5 Posts
    704 Views
    P
    @geoff-white : guess we'll find out.
  • 0 Votes
    4 Posts
    566 Views
    danD
    @robert-hh that's true, you can have the libraries anywhere (with Pymakr as well)
  • FFI Lib module not found

    Discussion modules lib micropython
    3
    0 Votes
    3 Posts
    671 Views
    S
    Thank you for the answer. I want to adapt this raspberrypi script to my Pycom WiPy. but I stuck ... :-( #!/usr/bin/python import io # used to create file streams import fcntl # used to access I2C parameters like addresses import time # used for sleep delay and timestamps import string # helps parse strings class AtlasI2C: long_timeout = 1.5 # the timeout needed to query readings and calibrations short_timeout = .5 # timeout for regular commands default_bus = 1 # the default bus for I2C on the newer Raspberry Pis, certain older boards use bus 0 default_address = 98 # the default address for the sensor current_addr = default_address def __init__(self, address=default_address, bus=default_bus): # open two file streams, one for reading and one for writing # the specific I2C channel is selected with bus # it is usually 1, except for older revisions where its 0 # wb and rb indicate binary read and write self.file_read = io.open("/dev/i2c-"+str(bus), "rb", buffering=0) self.file_write = io.open("/dev/i2c-"+str(bus), "wb", buffering=0) # initializes I2C to either a user specified or default address self.set_i2c_address(address) def set_i2c_address(self, addr): # set the I2C communications to the slave specified by the address # The commands for I2C dev using the ioctl functions are specified in # the i2c-dev.h file from i2c-tools I2C_SLAVE = 0x703 fcntl.ioctl(self.file_read, I2C_SLAVE, addr) fcntl.ioctl(self.file_write, I2C_SLAVE, addr) self.current_addr = addr def write(self, cmd): # appends the null character and sends the string over I2C cmd += "\00" self.file_write.write(cmd) def read(self, num_of_bytes=31): # reads a specified number of bytes from I2C, then parses and displays the result res = self.file_read.read(num_of_bytes) # read from the board response = filter(lambda x: x != '\x00', res) # remove the null characters to get the response if ord(response[0]) == 1: # if the response isn't an error # change MSB to 0 for all received characters except the first and get a list of characters char_list = map(lambda x: chr(ord(x) & ~0x80), list(response[1:])) # NOTE: having to change the MSB to 0 is a glitch in the raspberry pi, and you shouldn't have to do this! return "Command succeeded " + ''.join(char_list) # convert the char list to a string and returns it else: return "Error " + str(ord(response[0])) def query(self, string): # write a command to the board, wait the correct timeout, and read the response self.write(string) # the read and calibration commands require a longer timeout if((string.upper().startswith("R")) or (string.upper().startswith("CAL"))): time.sleep(self.long_timeout) elif string.upper().startswith("SLEEP"): return "sleep mode" else: time.sleep(self.short_timeout) return self.read() def close(self): self.file_read.close() self.file_write.close() def list_i2c_devices(self): prev_addr = self.current_addr # save the current address so we can restore it after i2c_devices = [] for i in range (0,128): try: self.set_i2c_address(i) self.read() i2c_devices.append(i) except IOError: pass self.set_i2c_address(prev_addr) # restore the address we were using return i2c_devices def main(): device = AtlasI2C() # creates the I2C port object, specify the address or bus if necessary print(">> Atlas Scientific sample code") print(">> Any commands entered are passed to the board via I2C except:") print(">> List_addr lists the available I2C addresses.") print(">> Address,xx changes the I2C address the Raspberry Pi communicates with.") print(">> Poll,xx.x command continuously polls the board every xx.x seconds") print(" where xx.x is longer than the %0.2f second timeout." % AtlasI2C.long_timeout) print(">> Pressing ctrl-c will stop the polling") # main loop while True: input = raw_input("Enter command: ") if input.upper().startswith("LIST_ADDR"): devices = device.list_i2c_devices() for i in range(len (devices)): print devices[i] # address command lets you change which address the Raspberry Pi will poll elif input.upper().startswith("ADDRESS"): addr = int(string.split(input, ',')[1]) device.set_i2c_address(addr) print("I2C address set to " + str(addr)) # continuous polling command automatically polls the board elif input.upper().startswith("POLL"): delaytime = float(string.split(input, ',')[1]) # check for polling time being too short, change it to the minimum timeout if too short if delaytime < AtlasI2C.long_timeout: print("Polling time is shorter than timeout, setting polling time to %0.2f" % AtlasI2C.long_timeout) delaytime = AtlasI2C.long_timeout # get the information of the board you're polling info = string.split(device.query("I"), ",")[1] print("Polling %s sensor every %0.2f seconds, press ctrl-c to stop polling" % (info, delaytime)) try: while True: print(device.query("R")) time.sleep(delaytime - AtlasI2C.long_timeout) except KeyboardInterrupt: # catches the ctrl-c command, which breaks the loop above print("Continuous polling stopped") # if not a special keyword, pass commands straight to board else: if len(input) == 0: print "Please input valid command." else: try: print(device.query(input)) except IOError: print("Query failed \n - Address may be invalid, use List_addr command to see available addresses") if __name__ == '__main__': main()
  • 3 Votes
    2 Posts
    533 Views
    A
    Dear @danielm, we are conceiving a medium-sized MicroPython codebase [1] called Terkin for MicroPython [1b] for the Bee Observer project, which might well resonate with your questions and requirements. So, we want to humbly point you to the terkin folder [2] within that repository which might spark some ideas for your development process on how to structure a codebase appropriately by using object oriented programming. Similar to what you are describing, the datalogger program also uses quite a bunch of 3rd party modules which will get populated into a dist-packages folder through make setup [3] after cloning the repository. Thus, these packages are not part of the repository itself but will be acquired at development/build time. Maybe this helps on giving you some ideas around what you have been asking for. With kind regards, Andreas. P.S.: Just recently, our datalogger program started to spark interest with others and we got support from @poesel to integrate support for BLE [4,5] (thanks!) as well as LoRa/TTN telemetry [6] from other contributors. Saying this, we will be happy to accept further contributions from the community as we are aiming to make this more generic beyond its original scope of beehive monitoring. [1] https://github.com/hiveeyes/hiveeyes-micropython-firmware [1b] https://community.hiveeyes.org/t/developing-terkin-for-micropython/233 [2] https://github.com/hiveeyes/hiveeyes-micropython-firmware/tree/master/terkin [3] https://github.com/hiveeyes/hiveeyes-micropython-firmware/blob/master/tools/setup.mk [4] https://community.hiveeyes.org/t/ble-fur-hiveeyes/2637 [5] https://community.hiveeyes.org/t/ble-gatt-auf-esp32-mit-micropython/2371 [6] https://community.hiveeyes.org/t/hiveeyes-micropython-datalogger-goes-lorawan-ttn/2691
  • "Other Python implementations."

    LoPy modules lopy python
    2
    1
    0 Votes
    2 Posts
    579 Views
    J
    @stefan85e MicroPython - as used on the Pycom boards - would count as a different implementation from CPython
  • 1 Votes
    7 Posts
    3k Views
    B
    @meven What you advised: "python -m pip install pycom" is working for me also, thank you However next, I got this error: "[pylint] E1101:Module 'pycom' has no 'heartbeat' member" but I could ignore it by: # pylint: disable=maybe-no-member pycom.heartbeat(False) pycom.rgbled(0xffff00)
  • btree lib support

    MicroPython micorpython modules
    19
    0 Votes
    19 Posts
    2k Views
    robert-hhR
    @Fakstory I made a tarball and placed it here: https://github.com/robert-hh/Shared-Stuff.git You should be able to load it with the Pycom update tools. I have no GPy here, so I cannot test, whether the firmware works.
  • 0 Votes
    1 Posts
    592 Views
    No one has replied
  • PySense nonsense altitude readings

    Expansion Board lopy pysense modules
    7
    0 Votes
    7 Posts
    2k Views
    J
    @catalin said in PySense nonsense altitude readings: You could look into datasheet for better explanations: https://www.nxp.com/docs/en/data-sheet/MPL3115A2.pdf Yet another data sheet with complete non-sense... It's saying you should use OFF_H, when really the registers to use are BAR_IN_MSB/BAR_IN_LSB. @seb or @catalin, it would probably be a good idea to add a function in PL3115A2.py to set this value. self.i2c.writeto_mem(MPL3115_I2CADDR, MPL3115_BAR_IN_MSB, bytes([int(qnh*100/2) >> 8, int(qnh*100/2) & 255])) Note that even with this, one should not expect a very precise altitude indication, it can vary several meters up or down. If you want a more precise altitude (and independence from the weather), you probably need to use a GPS.
  • 0 Votes
    3 Posts
    1k Views
    P
    @robert-Thank you, worked perfectly