smbus → wiringpi 사용하면 된다.
아 .. setupGPIO 하면 GPIO pin 사용하겠다는 의미이다.
이거 참고해 보기
Path: /home/pi/Yahboom_project/Raspbot/2.Hardware Control course/2.Drive motor 여기 한 번 살펴보기
#!/usr/bin/env python # coding: utf-8 import smbus # 제어 라이브러리 -> wiring pi는 GPIO 핀 제어, 얜 외부 장치와 통신(?) -> 차와 통신 하는 듯 import time import math class YB_Pcb_Car(object): def get_i2c_device(self, address, i2c_bus): self._addr = address if i2c_bus is None: return smbus.SMBus(1) else: return smbus.SMBus(i2c_bus) def __init__(self): # Create I2C device. self._device = self.get_i2c_device(0x16, 1) def write_u8(self, reg, data): try: self._device.write_byte_data(self._addr, reg, data) except: print ('write_u8 I2C error') def write_reg(self, reg): try: self._device.write_byte(self._addr, reg) except: print ('write_u8 I2C error') def write_array(self, reg, data): try: # self._device.write_block_data(self._addr, reg, data) self._device.write_i2c_block_data(self._addr, reg, data) except: print ('write_array I2C error') def Ctrl_Car(self, l_dir, l_speed, r_dir, r_speed): try: reg = 0x01 data = [l_dir, l_speed, r_dir, r_speed] self.write_array(reg, data) except: print ('Ctrl_Car I2C error') def Control_Car(self, speed1, speed2): try: if speed1 < 0: dir1 = 0 else: dir1 = 1 if speed2 < 0: dir2 = 0 else: dir2 = 1 self.Ctrl_Car(dir1, int(math.fabs(speed1)), dir2, int(math.fabs(speed2))) except: print ('Ctrl_Car I2C error') def Car_Run(self, speed1, speed2): try: self.Ctrl_Car(1, speed1, 1, speed2) except: print ('Car_Run I2C error') def Car_Stop(self): try: reg = 0x02 self.write_u8(reg, 0x00) except: print ('Car_Stop I2C error') def Car_Back(self, speed1, speed2): try: self.Ctrl_Car(0, speed1, 0, speed2) except: print ('Car_Back I2C error') def Car_Left(self, speed1, speed2): try: self.Ctrl_Car(0, speed1, 1, speed2) except: print ('Car_Spin_Left I2C error') def Car_Right(self, speed1, speed2): try: self.Ctrl_Car(1, speed1, 0, speed2) except: print ('Car_Spin_Left I2C error') def Car_Spin_Left(self, speed1, speed2): try: self.Ctrl_Car(0, speed1, 1, speed2) except: print ('Car_Spin_Left I2C error') def Car_Spin_Right(self, speed1, speed2): try: self.Ctrl_Car(1, speed1, 0, speed2) except: print ('Car_Spin_Right I2C error') def Ctrl_Servo(self, id, angle): try: reg = 0x03 data = [id, angle] if angle < 0: angle = 0 elif angle > 180: angle = 180 self.write_array(reg, data) except: print ('Ctrl_Servo I2C error')
others..
#define MOTOR1 8
#define MOTOR2 9
int main (void) {
if (wiringPiSetup() == -1) {
return 1 ;
}
pinMode (MOTOR1, OUTPUT) ;
pinMode (MOTOR2, OUTPUT) ;
++ digitalWrite
[출처] 라즈베리파이 RC카 제작 #2 - DC 모터 동작|작성자 주인아줌마
![[Notion] :](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fc0389671-d63b-4c5d-a65d-5113fb1666a2%2Faf276f8d-c43c-4190-a784-11927a8f1c86%2F%25EB%2585%25B8%25EC%2585%2598_%25EC%2595%2584%25EC%259D%25B4%25EC%25BD%2598.png?table=block&id=244dd211-78d0-4c22-8c35-2efb01da5258&cache=v2)