Oserror errno 121 remote i o error

I have been trying everything to get my RPi4B to communicate with the USP Plus but I continually get this error pi@ImpactRemote:~/upsplus $ python3 OTA_firmware_upgrade.py Traceback (most recent ca...

I have been trying everything to get my RPi4B to communicate with the USP Plus but I continually get this error

pi@ImpactRemote:~/upsplus $ python3 OTA_firmware_upgrade.py
Traceback (most recent call last):
  File "OTA_firmware_upgrade.py", line 23, in <module>
    aReceiveBuf.append(bus.read_byte_data(DEVICE_ADDR, i))
  File "/usr/local/lib/python3.7/dist-packages/smbus2/smbus2.py", line 433, in read_byte_data
    ioctl(self.fd, I2C_SMBUS, msg)
OSError: [Errno 121] Remote I/O error
pi@ImpactRemote:~/upsplus $ 

Remote I/O error.

I have been unable to find any information on what this error means and how to troubleshoot it. as you can see below its stopping the install of the UPS Plus and failing

pi@ImpactRemote:~/upsplus $ sudo ./install.sh
[info] Welcome to 52Pi Technology UPS Plus auto-install Program!.
[info] More information please visit here:.
[info] -----------------------------------------------------.
[info] https://wiki.52pi.com/index.php/UPS_Plus_SKU:_EP-0136.
[info] -----------------------------------------------------.
[info] Start the configuration environment check....
[ ok ] Network status is ok....
[info] Start the software check....
[ ok ] git has been installed..
[ ok ] pi-ina219 library has been installed.
[info] Installing smbus2 library....
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: smbus in /usr/local/lib/python3.7/dist-packages (1.1.post2)
Requirement already satisfied: smbus2 in /usr/local/lib/python3.7/dist-packages (0.4.1)
[ ok ] smbus2 Installation successful..
[info] create /root/bin directory....
[info] Create python3 script in location: /root/bin/upsPlus.py Successful.
[ ok ] Create UPS Plus IoT customer service python script successful.
[info] Add into general crontab list..
[info] crontab has been created successful!.
------------------------------------------------------------
------Current information of the detected Raspberry Pi------
------------------------------------------------------------
Raspberry Pi Supply Voltage: 5.152 V
Raspberry Pi Current Current Consumption: 7029.773 mA
Raspberry Pi Current Power Consumption: 36245.585 mW
------------------------------------------------------------
Traceback (most recent call last):
  File "/root/bin/upsPlus.py", line 38, in <module>
    ina_batt.configure()
  File "/usr/local/lib/python3.7/dist-packages/ina219.py", line 175, in configure
    self._max_expected_amps)
  File "/usr/local/lib/python3.7/dist-packages/ina219.py", line 310, in _calibrate
    self._calibration_register(calibration)
  File "/usr/local/lib/python3.7/dist-packages/ina219.py", line 356, in _calibration_register
    self.__write_register(self.__REG_CALIBRATION, register_value)
  File "/usr/local/lib/python3.7/dist-packages/ina219.py", line 388, in __write_register
    self._i2c.writeList(register, register_bytes)
  File "/usr/local/lib/python3.7/dist-packages/Adafruit_GPIO/I2C.py", line 127, in writeList
    self._bus.write_i2c_block_data(self._address, register, data)
  File "/usr/local/lib/python3.7/dist-packages/Adafruit_PureIO/smbus.py", line 368, in write_i2c_block_data
    self._device.write(data)
OSError: [Errno 121] Remote I/O error
[FAIL] UPS Plus Installation is Incomplete! ... failed!
[info] Please visit wiki for more information:.
[info] -----------------------------------------------------.
[info] https://wiki.52pi.com/index.php/UPS_Plus_SKU:_EP-0136.
[info] -----------------------------------------------------.
pi@ImpactRemote:~/upsplus $ 

Thanks for the assistance.

Hi folks

Would appreciate some advice on this error.

Background:
— Pi0W running Raspbian Buster, Python v3.7.3, GPIO Zero v1.6.2, luma.oled v3.8.1
— SSD1306 screen running over I2C using luma.oled package in Python3, has worked well for a few months when used in conjunction with touch control using an AT42QT1070 in standalone mode with three keys tied to GPIO pins
— However I’m now putting the setup in a plastic enclosure and the sensitivity in standalone mode isn’t sufficient to detect the touch, therefore I need to run the QT1070 in comms mode (I2C), as that lets you adjust the sensitivity.

i2cdetect shows both devices fine (3c is the screen, 1b is the touch controller):

Code: Select all

pi@raspberrypi:~ $ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- 1b -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

I have a Python script to control the screen and another for touch control.

If I just load the screen script it will start the screen and update fine but then after a few seconds it will then crash with the following error:

Code: Select all

  File "/usr/local/lib/python3.7/dist-packages/luma/core/render.py", line 43, in __exit__
    self.device.display(self.image)
  File "/usr/local/lib/python3.7/dist-packages/luma/oled/device/__init__.py", line 225, in display
    self.data(list(buf))
  File "/usr/local/lib/python3.7/dist-packages/luma/core/device.py", line 55, in data
    self._serial_interface.data(data)
  File "/usr/local/lib/python3.7/dist-packages/luma/core/interface/serial.py", line 125, in data
    write(list(data[i:i + block_size]))
  File "/usr/local/lib/python3.7/dist-packages/luma/core/interface/serial.py", line 134, in _write_large_block
    self._bus.i2c_rdwr(self._i2c_msg_write(self._addr, [self._data_mode] + data))
  File "/usr/local/lib/python3.7/dist-packages/smbus2/smbus2.py", line 658, in i2c_rdwr
    ioctl(self.fd, I2C_RDWR, ioctl_data)
OSError: [Errno 121] Remote I/O error

If I have the touch script running already and load the screen script I’ll then get an error pretty much straight away (see below) and the screen script will also abort with the above error.

Code: Select all

Traceback (most recent call last):
  File "./touchtest.py", line 39, in <module>
    version = i2cbus.read_byte_data(i2caddress, CHECKVER)
OSError: [Errno 121] Remote I/O error

At first it was happening whenever I tried to run it if the screen was attached however I found adding a time.sleep(1) after initialising the SMBus seemed to help it run at least for a few minutes (I noticed it mentioned at viewtopic.php?t=203286).

It seems that if I just run with the screen connected or just with the touch controls it works OK but when both are connected they’re somehow interacting with each other, despite both showing up correctly and both working to some extent before they abort.

Any suggestions gratefully received!

Raspberry Pi - Common Errors

Table of Contents

  • OSError: [Errno 121] Remote I/O error
    • Solution
  • Servo motor is not moving a full 180 degree
    • Solution
  • Servo motor is jittery
    • Solution
  • Wrap Up

This post will list some of the common Raspberry Pi errors that I have encountered while building my Internet of Things (IOT) projects. This will include issues that arose while interfacing with sensors and the solutions I have figured out.

OSError: [Errno 121] Remote I/O error

I kept encountering the following error while working with an I2C LCD display together with other sensors like a Keypad and Servo Motor. Whenever I run my python code this error keeps on popping up for some unknown reason.

  File "/home/pi/rpi_keypad_db_security_system/drivers/i2c_dev.py", line 104, in __init__
    self.lcd_write(0x03)
  File "/home/pi/rpi_keypad_db_security_system/drivers/i2c_dev.py", line 127, in lcd_write
    self.lcd_write_four_bits(mode | (cmd & 0xF0))
  File "/home/pi/rpi_keypad_db_security_system/drivers/i2c_dev.py", line 122, in lcd_write_four_bits
    self.lcd.write_cmd(data | LCD_BACKLIGHT)
  File "/home/pi/rpi_keypad_db_security_system/drivers/i2c_dev.py", line 74, in write_cmd
    self.bus.write_byte(self.addr, cmd)
OSError: [Errno 121] Remote I/O error

Solution

I powered the LCD to the 5V pin of my Raspberry Pi GPIO. It turns out that not enough current is supplied by my raspberry pi charger. Powering this sensor or display with a separate power source will solve the issue. Just make sure that you connect the ground between your raspberry pi and your external source.

This could also be a case of bad connections or wiring between the GPIO pins and the I2C LCD getting cut. Replace the wires and validate.

Servo motor is not moving a full 180 degree

My servo is not moving the full zero to 180 degrees even if I have set the duty cycle according to the datasheet specification.

Solution

Please see the following link.

Servo motor is jittery

The servo motor appears to be jittery and is moving a lot or not staying in position.

Solution

I found the following solutions to work in my case. I am not sure if this will work out in your case.

In my code, if your servo motor does not need to move then setting the duty cycle to zero will keep the servo motor from jittering.

pwm = GPIO.PWM(servo_pin,50) 
pwm.ChangeDutyCycle(0)

Another solution is to power your servo motor from a different power source and not the raspberry pi. Just make sure to connect the ground of your external source with that of the raspberry pi.

These two solutions appear to have fixed my issues. Try it out yourselves and let me know if this does work.

Wrap Up

I will keep updating this post to list down some of the common errors that I have encountered while working with my raspberry pi.

Stay Tuned! Happy Exploring!

Post Views: 127

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
import cv2
import numpy as np
import pygame
import smbus
import time
import sys
 
if __name__ == '__main__':
    def nothing(*arg):
        pass
 
# Функции и процедуры для интерфейса
 
def GlawInterfese(frame):
    frame = cv2.circle(frame, (width // 2, height // 2), 5, (255, 0, 0), -1)
    frame = cv2.rectangle(frame, ((width // 2) - 25, (height // 2) - 25), ((width // 2) + 25, (height // 2) + 25), (0, 255, 0), 2)
    return frame
    
# Передача данных Rspberry и Arduino(общение плат)
# for RPI version 1, use "bus = smbus.SMBus(0)"
bus = smbus.SMBus(1)
# This is the address we setup in the Arduino Program
address = 0x03
def writeNumber(value):
    bus.write_byte(address, int(value))
    #bus.write_data(address, 0, int(value))
    #return -1
def readNumber():
    number = bus.read_byte(address)
    # number = bus.read_byte_data(address, 1)
    return number
 
#Часть кода с pygame
fps = 80
pygame.init()
displey = pygame.display.set_mode((300, 300))
clock = pygame.time.Clock()
 
#Переменные для бработки событий клавиш
UP = "UP"
DOWN = "DOWN"
RIGHT = "RIGHT"
LEFT = "LFT"
STOP = "STOP"
W = 'w' # Вперёд
S = 's' # Наад
A = 'a' # Влево
D = 'd' # Вправо
Q = 'q' # Клосе
E = 'e' # Открыть
N = 'n' # Автонаведение платформы на обьекта
Z = 'z' # Автозахват
motion = STOP
 
#Часть кода OpenCV
#cv2.namedWindow("Settings")
cap = cv2.VideoCapture(0)
#cv2.createTrackbar('h1', 'Settings', 0, 255, nothing)
#cv2.createTrackbar('s1', 'Settings', 0, 255, nothing)
#cv2.createTrackbar('v1', 'Settings', 0, 255, nothing)
 
#cv2.createTrackbar('h2', 'Settings', 255, 255, nothing)
#cv2.createTrackbar('s2', 'Settings', 255, 255, nothing)
#cv2.createTrackbar('v2', 'Settings', 255, 255, nothing)
cx = 0
cy = 0
'''------------------------------------------------------------'''
while 1:
    _, img = cap.read()
    height, width, depth = img.shape
    #img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    #cv2.imshow("real", img)
    #h1 = cv2.getTrackbarPos('h1', 'Settings')
    #s1 = cv2.getTrackbarPos('s1', 'Settings')
    #v1 = cv2.getTrackbarPos('v1', 'Settings')
 
    #h2 = cv2.getTrackbarPos('h2', 'Settings')
    #s2 = cv2.getTrackbarPos('s2', 'Settings')
    #v2 = cv2.getTrackbarPos('v2', 'Settings')
    #min = np.array((h1, s1, v1), np.uint8)
    min = np.array((0, 0, 170), np.uint8)
    max = np.array((148, 230, 255), np.uint8)
    BitMask = cv2.inRange(img, min, max)
    BitMask, contours, hierarchy = cv2.findContours(BitMask.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    for i in pygame.event.get():
        if i.type == pygame.QUIT:
            sys.exit()
            wihod = 1
            break
            #sys.exit()
        elif i.type == pygame.KEYDOWN:
            if i.key == pygame.K_UP:
                motion = UP
            elif i.key == pygame.K_DOWN:
                motion = DOWN
            elif i.key == pygame.K_RIGHT:
                motion = RIGHT
            elif i.key == pygame.K_LEFT:
                motion = LEFT
            elif i.key == pygame.K_w:
                motion = W
            elif i.key == pygame.K_s:
                motion = S
            elif i.key == pygame.K_a:
                motion = A
            elif i.key == pygame.K_d:
                motion = D
            elif i.key == pygame.K_q:
                motion = Q
            elif i.key == pygame.K_e:
                motion = E
            elif i.key == pygame.K_n:
                motion = N
            elif i.key == pygame.K_z:
                motion = Z
        elif i.type == pygame.KEYUP:
            if i.key in [pygame.K_UP, pygame.K_DOWN,
                         pygame.K_RIGHT, pygame.K_LEFT, pygame.K_w,
                         pygame.K_s, pygame.K_a, pygame.K_d, pygame.K_q, pygame.K_e, pygame.K_n, pygame.K_z]:
                motion = STOP
    #motion = STOP
    if motion == UP:
        #cv2.imshow("real", img)
        #var = input("Enter 1 - 9: ")
        #if not var:
            #continue
        writeNumber(8)#var)
        #print("RPI: Hi Arduino, I sent you ", var)
            # sleep one second
        #time.sleep(1 / 90)
        #number = readNumber()
        #print("Arduino: Hey RPI, I received a digit ", number)
        #print()
        #print('UP')
    elif motion == DOWN:
        #cv2.imshow("real", img)
        #Mot.MotorDown()
        writeNumber(5)
        #time.sleep(1 / 90)
        #number = readNumber()
        #print('DOWN')
    elif motion == RIGHT:
        #cv2.imshow("real", img)
        writeNumber(6)
        #time.sleep(1 / 90)
        #number = readNumber()
        #print('RIGHT')
    elif motion == LEFT:
        #cv2.imshow("real", img)
        writeNumber(4)
        #time.sleep(1 / 90)
        #number = readNumber()
        #print('LEFT')
    elif motion == STOP:
        writeNumber(0)
        #_, img = cap.read()
        #height, width, depth = img.shape
        '''img = GlawInterfese(img)
        #cv2.imshow("real", img)
        if len(contours) > 0:
            #-------------Перебор контуров-----------------------------------------
            for idx, cnt in enumerate(contours):
                # аппроксимируем (сглаживаем) контур (находим граничущие точки)
                peri = cv2.arcLength(cnt, True)
                approx = cv2.approxPolyDP(cnt, 0.02 * peri, True)
                # Находим площадь контура
                area = cv2.contourArea(cnt)
                if (area > 10000) and (area < 300000):
                    M = cv2.moments(cnt)
                    if M['m00'] > 0:
                        cx = int(M['m10'] / M['m00'])
                        cy = int(M['m01'] / M['m00'])
                        img = cv2.circle(img, (cx, cy), 10, (0, 0, 255), -1)
                    x, y, w, h = cv2.boundingRect(cnt)
                    img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
        #cv2.imshow("Settings", BitMask)
        cv2.imshow('real', img)'''
        
        #writeNumber(0)
        #time.sleep(1 / 90)
        #number = readNumber()
        #print('STOP')
    # автонаведение
    elif motion == N:
        #print()
        #print(cx)
        '''while cx > ((width // 2) + 50) or cx < ((width // 2) - 50):
            if cx > ((width // 2) + 25):
                writeNumber(6)
                #time.sleep(1 / 700)
                #number = readNumber()
            elif cx < ((width // 2) - 25):
                writeNumber(4)
                #time.sleep(1 / 700)
                #number = readNumber()
            img = GlawInterfese(img)
            #cv2.imshow("real", img)
            if len(contours) > 0:
                #-------------Перебор контуров-----------------------------------------
                for idx, cnt in enumerate(contours):
                    # аппроксимируем (сглаживаем) контур (находим граничущие точки)
                    peri = cv2.arcLength(cnt, True)
                    approx = cv2.approxPolyDP(cnt, 0.02 * peri, True)
                    # Находим площадь контура
                    area = cv2.contourArea(cnt)
                    if (area > 10000) and (area < 300000):
                        M = cv2.moments(cnt)
                        if M['m00'] > 0:
                            cx = int(M['m10'] / M['m00'])
                            cy = int(M['m01'] / M['m00'])
                            img = cv2.circle(img, (cx, cy), 10, (0, 0, 255), -1)
                        x, y, w, h = cv2.boundingRect(cnt)
                        img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
            #cv2.imshow("Settings", BitMask)
            #cv2.waitKey(1)
            #cv2.imshow('real', img)
            _, img = cap.read()
            min = np.array((0, 0, 170), np.uint8)
            max = np.array((148, 230, 255), np.uint8)
            BitMask = cv2.inRange(img, min, max)
            BitMask, contours, hierarchy = cv2.findContours(BitMask.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
            #print('n')
            
    # Автозахват
    elif motion == Z:
        #writeNumber()        
        _, img = cap.read()
        min = np.array((0, 0, 170), np.uint8)
        max = np.array((148, 230, 255), np.uint8)
        BitMask = cv2.inRange(img, min, max)
        BitMask, contours, hierarchy = cv2.findContours(BitMask.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)'''
    #Сервоприводы
    elif motion == W:
        writeNumber(119)
        #time.sleep(1 / 100)
        #number = readNumber()
        #print('w')
    elif motion == S:
        writeNumber(115)
        #time.sleep(1 / 100)
        #number = readNumber()
        #print('s')
    elif motion == A:
        writeNumber(97)
        #time.sleep(1 / 100)
        #number = readNumber()
        #print('a')
    elif motion == D:
        writeNumber(100)
        #time.sleep(1 / 100)
        #number = readNumber()
        #print('d')
    elif motion == Q:
        writeNumber(113)
        #time.sleep(1 / 100)
        #number = readNumber()
        #print('q')
    elif motion == E:
        writeNumber(101)
        #time.sleep(1 / 100)
        #number = readNumber()
        #print('e')
    #clock.tick(fps)
    key = cv2.waitKey(1)
    if key == 27: break
    time.sleep(0.1)
'''-----------------------------------------------'''
cap.release()
cv2.destroyAllWindows()

Contributors:
M-Short, bboyho



Favorited



Favorite

1

Troubleshooting

Below are a few additional troubleshooting tips and tricks when using the Qwiic devices with a single board computer.

The Demo Code is Not Running

If you are having trouble running the demo code, there are a few reasons why the Python script may not be executing. Below are two common reasons why the demo code may not be running.

Library Not Installed

If the libraries are not installed properly, you may receive an error similar to the output below when trying to execute the Python script:

language:bash
 Traceback (most recent call last):
  File "./qwiic_kit_for_pi_demo.py", line 24, in <module>
    import qwiic 
ImportError: No module named 'qwiic'

The ImportError indicates that the module(s) was not installed properly. Make sure that the Python modules are installed on the Pi in order to run the demo.

I2C Bus Not Turned On

If you receive an error similar to the one below, there may be something with the interface settings for the I2C bus.

language:bash
Error:  Failed to connect to I2C bus 1. Error: [Errno 2] No such file or directory
Error connecting to Device: 60, 'NoneType' object has no attribute 'write_byte'
Error:  Failed to connect to I2C bus 1. Error: [Errno 2] No such file or directory
Traceback (most recent call last):
  File "/home/pi/Qwiic-Kit-for-Pi/qwiic_kit_for_pi_demo.py", line 50, in <module>
    bme.begin()
  File "/home/pi/.local/lib/python3.7/site-packages/qwiic_bme280.py", line 160, in begin
    chipID = self._i2c.readByte(self.address, self.BME280_CHIP_ID_REG)
  File "/home/pi/.local/lib/python3.7/site-packages/qwiic_i2c/linux_i2c.py", line 142, in readByte
    return self.i2cbus.read_byte_data(address, commandCode)
AttributeError: 'NoneType' object has no attribute 'read_byte_data'

The Error: Failed to connect to I2C bus 1. Error: [Errno 2] No such file or directory at the beginning of the error indicates that the I2 bus is not turned on. Make sure to use the raspi-config to ensure that I2C bus is turned on as opposed to using the graphical user interface.

I2C Device Not Connected

If you receive an error similar to the one below, it means that the bus is having issues reading a sensor.

language:bash
Traceback (most recent call last):
  File "/home/pi/qwiicpy/qwiic_kit_for_pi_demo.py",     line 117, in <module>
    ccs.readAlgorithmResults() #updates the TVOC and CO2 values
  File "/home/pi/qwiicpy/qwiic/qwiic_ccs811.py", line 159, in readAlgorithmResults
    data = self.readBlock(CSS811_ALG_RESULT_DATA, 4)
  File "/home/pi/qwiicpy/qwiic/qwiicdevice.py", line 119, in readBlock
    return self._i2cDriver.readBlock(self.address, commandCode, nBytes)
  File "/home/pi/qwiicpy/qwiic/qwiic_i2c/linux_i2c.py", line 144, in readBlock
    return self.i2cbus.read_i2c_block_data(address, commandCode, nBytes)
OSError: [Errno 121] Remote I/O error

The OSError: [Errno 121] Remote I/O error indicates that an I2C device is not connected to the bus. Make sure that the sensors and micro OLED are securely connected to the I2C bus. The demo code currently checks to see if the CCS811, BME280, VCNL4040, and micro OLED are connected to the Pi’s I2C bus before executing.

Don’t forget to setup the clock stretching for the Raspberry Pi, this is required for the CCS811 to work correctly on the bus. If 10000 is still too fast, try using a slower baud rate. Make sure to reboot for the changes to take effect. In some cases, adding the clock stretching and then turning on the I2C via the raspi-config will overwrite the settings for the …/boot/config.txt. If you see this configuration:

language:bash
# Enable I2C clock stretching
dtparam=i2c_arm=on

Make sure to adjust the line back to the following. Then save the changes and reboot the Pi for the changes to take effect.

language:bash
# Enable I2C clock stretching
dtparam=i2c_arm_baudrate=10000

I’m Having Problems Reading the CCS811’s NTC Thermistor.

If you receive this error, this is because there is no NTC thermistor connected on the environmental combo board! You will not want to call this function if you are using the CCS811/BME280 environmental combo breakout.

language:bash
Traceback (most recent call last):
  File "/home/pi/Qwiic-Kit-for-Pi/qwiic_kit_for_pi_demo.py", line 128, in <module>
    ccs.readNTC() #updates temp value
  File "/home/pi/.local/lib/python3.7/site-packages/qwiic_ccs811.py", line 356, in readNTC
    self.resistance = self.ntcCounts * self.refResistance / float(self.vrefCounts)
ZeroDivisionError: float division by zero

I’m Having Problems Getting the Qwiic_Py Library.

If you are having trouble installing the modules, you may receive this error:

Could not install packages due to an EnvironmentError: 404 Client Error: Not Found for url: https://www.piwheels.org/simple/sparkfun-qwiic/

Make sure that you are connected to the Internet to install the modules. Also, make sure that you are using Python3 and pip3 with the correct alias as stated earlier.

If you receive this error when trying to install the modules:

language:bash
ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/usr/local/lib/python3.7/dist-packages/sparkfun_qwiic_i2c-0.8.3.dist-info'
Consider using the `--user` option or check the permissions.

This is due to your user permissions. Make sure to use sudo with your command:

sudo pip install sparkfun_qwiic

Or --user to the command.

language:bash
pip install --user sparkfun_qwiic

I Don’t Want to Use Cayenne or Another 3rd Party Service.

That’s perfectly alright, you can delete or comment out all the relevant commands as that is not will not affect the rest of the code.

I Can’t Connect to Cayenne.

Make sure you have copied your username, password, and clientid correctly from Cayenne into the code before executing the Python script. Also, ensure that you have a reliable connection to the Internet.

How Do I Add _____ Qwiic Sensor?

Right now we only have a few Qwiic sensors in the Qwiic Py library, but we are looking to keep adding more. Please periodically check back to see if the sensor you want is available. You can also check the Internet for existing Python code for that sensor or write your own library.


Понравилась статья? Поделить с друзьями:
  • Ose exe ошибка приложения
  • Ottplayer ошибка подключения к источнику потока
  • Osd verrouillage как исправить
  • Ottplayer error get data of plst
  • Osconflib dll ошибка