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!
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.