Sensor-kortet är gjort av Pimoroni och har ett mjukvarupaket för att få igång sensorn. Därigenom får man ut rådata från sensorn i form av temperatur, tryck, luftfuktighet och en resistans som är beroende på mängden flyktiga organiska sammansättningar (VOC) i luften.
Dock om man läser på om sensorn hos tillverkaren Bosch så är den grovkalibrerad och har dessutom funktioner som räknar ut ett luftkvalite-index med hjälp av en algoritm som inte är angiven i klartext utan kan laddas ner i form av ett statiskt lib från hemsidan.
Där kommer mitt problem för stunden: jag får inte inlänkandet av biblioteket i python att fungera.
Med biblioteket medföljer två header-filer och jag har lagt allt i en lib-katalog där då dessa filer ligger:
bsec_datatypes.h
bsec_interface.h
libalgobsec.a
Jag skapar sedan desssa två filer:
bsec.pyx
setup.py
Där bsec.pyx innehåller detta:
Kod: Markera allt
cdef extern from "bsec_interface.h":
bsec_library_return_t bsec_init()
def bsec_init():
bsec_init()
Kod: Markera allt
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
bsec_interface_extension = Extension(
name="bsec_interface",
sources=["bsec.pyx"],
libraries=["algobsec"],
library_dirs=["lib"],
include_dirs=["lib"]
)
setup(
name="bsec_interface",
ext_modules=cythonize([bsec_interface_extension])
)
Kod: Markera allt
python3 setup.py build_ext --inplace
Kod: Markera allt
pi@raspberrypi:~/python/bme680 $ python3 setup.py build_ext --inplace
Compiling bsec.pyx because it changed.
[1/1] Cythonizing bsec.pyx
/home/pi/.local/lib/python3.5/site-packages/Cython/Compiler/Main.py:367: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: /home/pi/python/bme680/bsec.pyx
tree = Parsing.p_module(s, pxd, full_module_name)
warning: bsec.pyx:8:0: Overriding cdef method with def method.
running build_ext
building 'bsec_interface' extension
creating build
creating build/temp.linux-armv7l-3.5
arm-linux-gnueabihf-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fdebug-prefix-map=/build/python3.5-6waWnr/python3.5-3.5.3=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -Ilib -I/usr/include/python3.5m -c bsec.c -o build/temp.linux-armv7l-3.5/bsec.o
arm-linux-gnueabihf-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,relro -g -fdebug-prefix-map=/build/python3.5-6waWnr/python3.5-3.5.3=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-armv7l-3.5/bsec.o -Llib -lalgobsec -o /home/pi/python/bme680/bsec_interface.cpython-35m-arm-linux-gnueabihf.so
Kod: Markera allt
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import bsec_interface as bsec
>>> bsec.bsec_init()
Traceback (most recent call last):
File "bsec.pyx", line 9, in bsec_interface.bsec_init
bsec_init()
File "bsec.pyx", line 9, in bsec_interface.bsec_init
bsec_init()
.
[Massa rader med samma innehåll bortklippta här]
.
File "bsec.pyx", line 9, in bsec_interface.bsec_init
bsec_init()
RecursionError: maximum recursion depth exceeded while calling a Python object
Testar att byta namn på funktionen i bsec.pyx till py_bsec_init() men får då följande felmeddelande:
Kod: Markera allt
omlokalisering R_ARM_MOVW_ABS_NC mot ”a local symbol” kan inte användas när ett delat objekt skapas; kompilera om med -fPIC
Man ska även plocka in fler filer från ett API som finns att ladda ner, men jag tänkte börja med att länka in biblioteket för att se hur långt jag kommer.