
Making a Rpi Pico Based Smart Vehicle
Making a Rpi Pico Based Smart Vehicle
ProjectsJun 3024 / 24Oct 1124d ago

I am going start a project on a Pico based smart vehicle. The project will be in many parts. The first part is summarized below.
Pico Smart Vehicle, Part 1 – Controlling a DC motor.
Introduction
This project is on how to use the Rpi Pico with a DC motor controller, such as L298N, to drive a toy DC motor with a speed encoder, such as the N20.
This first part of the project is focused on Pico, Motor Controller, and DC motor.
Rpi4B or Pi-Top 4 would be used as the master controller to communicate with this motor controller, and also controllers of other actuators and senors.
Update 2021jun30hkt2044
When I said above that I would use Rpi4B or Pi-Top 4 as the master controller, I had little confidence I was saying something sensible, because I never saw a Pi-Top 4 before. So I watched a recent video ([Ref 4])((https://www.youtube.com/watch?v=wFWbuj9JdiQ 4)) to make sure I know what is going on recently.
I was glad to see the video title “Rpi 4 on the Go” and that I can use Rpi OS instead of Pi-Top OS. The touch screen and BlueTooth keyboard also look impressive.
However, I am a very slow guy, so I will be going very slowly, with this Part 1 of controlling a DC motor.
One other thing is that I am not too sure that I am doing the right thing in this forum. I used to write sort of blogs in rpi.org forum, and also short answers in StackOverflow and Stack Exchange Q&A sites such as for Rpi… So this kind of project discussion topic looks very new to me. I guess I need to search to find out how should I start a project discussion topic.
So I searched and found this post about projects category (Ref 5). I am glad to know that this is a new thing, so I arrived in good time.
References
- Compatible motors/cabling – @Ltrain, 2021may25 2
- N20 Gear Motor (50:1 Ratio, 460 rpm, with Encoder) – Servo City 2
- How to Use Your Raspberry Pi Pico With DC Motors (Using DRV8833, L298 or L9110S) – By Les Pounder, Tom’s Hardware 2021jan30 6
- Raspberry Pi 4 On The Go! Pi-Top 4 FHD Touch Display & Bluetooth Keyboard Review – 2021jan25, 74,468 views 4
- About the Projects category post – pi-topTEAM, 2021mar19
- Dr. William Rankin Lecture (On Design etc) 1:18 hrs – Arkansas State 1.2K subscribers, 579 views, 2014sep05 2
2 Replies2Reply
- createdJun 30
- last reply24d
- 23replies
- 1.1kviews
- 1user
- 3likes
- 12links
- 24

Next step is to setup and test the Toshiba TB6612FNG Dual DC Motor Driver, to control the direction and speed (using PWM) of the SPV 2WD’s two N20 DC motors.
Now I am assembling the TB6612FNG test rig board
tb6612fng_setup_2021jul07011024×478 140 KB
tb6612fng_setup_2021jul07021009×367 81.4 KB
Design note:
I have selected TB6612FNG which has separate PWM speed control for each motor, and not RDV8833 which does not have separate motor speed control.
TB6612FNG Programming Cheat Sheettb6612fng_control_2021jul07011134×356 88.8 KB
Next step is doing the wring, and try PWM speed control.
References
(1) pi-top/pi-top-Python-SDK – pi-topgithub.com 1

pi-top/pi-top-Python-SDK 1
pi-top’s Python SDK (pitop package). Contribute to pi-top/pi-top-Python-SDK development by creating an account on GitHub.
(2) pi-top Python SDK (Preview)
(3) pi-top Python SDK – 6.3 Encoder Motor
Note from SDK 6.3: pi-top motor encoders use a built-in closed-loop control system, that feeds the readings from an encoder sensor to an PID controller. This controller will actively modify the motor’s current to move at the desired speed or position, even if a load is applied to the shaft.
Appendices
Appendix A – pi-top Python SDK (Preview) – DIY Rover API
- A simple, modular interface for interacting with a pi-top and its related accessories and components.
- This SDK aims to provide an easy-to-use framework for managing a pi-top. It includes a Python 3 package (pitop), with several modules for interfacing with a range of pi-top devices and peripherals It also contains CLI utilities, to interact with your pi-top using the terminal.
- Status: Active Development – This SDK is currently in active development.
- Supports all pi-top devices:
- Supports pi-top Maker Architecture (PMA)
- Supports all pi-top peripherals
- Backwards Compatibility
- The SDK is included out-of-the-box with pi-topOS.
- This library is installed as a Python 3 module called pitop. It includes several submodules that allow you to easily interact with most of the hardware inside a pi-top.
- Getting started docs
- 4.2. Robotics Kit: DIY Rover API
$ 4.2.1 Import modules
from pitop import
(
EncoderMotor,
ForwardDirection,
BrakingType
)
$ 4.2.2 Setup the motors for the rover configuration
motor_left = EncoderMotor(“M3”, ForwardDirection.CLOCKWISE)
motor_right = EncoderMotor(“M0”, ForwardDirection.COUNTER_CLOCKWISE)
motor_left.braking_type = BrakingType.COAST
motor_right.braking_type = BrakingType.COAST
$ 4.2.3 Define some functions for easily controlling the rover
def drive(target_rpm: float):
print("Start driving at target", target_rpm, "rpm...")
motor_left.set_target_rpm(target_rpm)
motor_right.set_target_rpm(target_rpm)
def stop_rover():
print("Stopping rover...")
motor_left.stop()
motor_right.stop()
def turn_left(rotation_speed: float):
print("Turning left...")
motor_left.stop()
motor_right.set_target_rpm(rotation_speed)
def turn_right(rotation_speed: float):
print("Turning right...")
motor_right.stop()
motor_left.set_target_rpm(rotation_speed)
$ 4.2.4 Start a thread to monitor the rover
def monitor_rover():
while True:
print("> Rover motor RPM's (L,R):", round(motor_left.current_rpm, 2), round(motor_right.current_rpm, 2))
sleep(1)
monitor_thread = Thread(target=monitor_rover, daemon=True)
monitor_thread.start()
# Go!
rpm_speed = 100
for _ in range(4):
drive(rpm_speed)
sleep(5)
turn_left(rpm_speed)
sleep(5)
stop_rover()
Reply1 MONTH LATER16 DAYS LATER

Example commands to move 4 motors
testSetupMoveMotorDirectionSpeedList(‘FourMotorsList’, ‘Forward’, ‘VerySlow’, ‘TwoSeconds’)
testSetupMoveMotorDirectionSpeedList(‘FourMotorsList’, ‘Backward’, ‘VeryFast’, ‘FourSeconds’)

A complete listing of the previous 4WD program.
# *** pico_4wd_v70.py - tlfong01, 2021oct10hkt2039 ***
from machine import Pin, PWM
import utime
secondsDict = {'TwoSeconds': 2,
'FourSeconds': 4,
}
# *** Part 1 - Measure 4WD Motor Speeds ***
intPinNum0 = 4 #GP4
intPinNum1 = 5 #GP5
intPinNum2 = 6 #GP6
intPinNum3 = 7 #GP7
intGpPinNumDict = {'0': 4, # GP4
'1': 5, # GP5
'2': 6, # GP6
'3': 7, # GP7
}
intPinNumList = [intPinNum0, intPinNum1, intPinNum2, intPinNum3]
intPin0 = Pin(intPinNum0, Pin.IN, Pin.PULL_DOWN)
intPin1 = Pin(intPinNum1, Pin.IN, Pin.PULL_DOWN)
intPin2 = Pin(intPinNum2, Pin.IN, Pin.PULL_DOWN)
intPin3 = Pin(intPinNum3, Pin.IN, Pin.PULL_DOWN)
intPinDict = {
'0': intPin0,
'1': intPin1,
'2': intPin2,
'3': intPin3,
}
global intCount0
global intCount1
global intCount2
global intCount3
intCount0 = 0
intCount1 = 0
intCount2 = 0
intCount3 = 0
intCountDict = {
'0': intCount0,
'1': intCount1,
'2': intCount2,
'3': intCount3,
}
def intCallBack0(pin):
global intCount0
intCount0 = intCount0 + 1
return
def intCallBack1(pin):
global intCount1
intCount1 = intCount1 + 1
return
def intCallBack2(pin):
global intCount2
intCount2 = intCount2 + 1
return
def intCallBack3(pin):
global intCount3
intCount3 = intCount3 + 1
return
intCallBackDict = {
'0': intCallBack0,
'1': intCallBack1,
'2': intCallBack2,
'3': intCallBack3,
}
intPin0.irq(intCallBack0, Pin.IRQ_FALLING)
intPin1.irq(intCallBack1, Pin.IRQ_FALLING)
intPin2.irq(intCallBack2, Pin.IRQ_FALLING)
intPin3.irq(intCallBack3, Pin.IRQ_FALLING)
def countIntPinIntPeriod(intPinNum, countPeriod):
global intCount0
global intCount1
global intCount2
global intCount3
intCount0 = 0
intCount1 = 0
intCount2 = 0
intCount3 = 0
utime.sleep(countPeriod)
if intPinNum == 0:
intCount = intCount0
elif intPinNum == 1:
intCount = intCount1
elif intPinNum == 2:
intCount = intCount2
else:
intCount = intCount3
return intCount
def countIntPinNumListIntPeriod(intPinNumList, countPeriod):
intCountList = [0] * len(intPinNumList)
for index in range(len(intPinNumList)):
intCountList[index] = countIntPinIntPeriod(intPinNumList[index], countPeriod)
return intCountList
# *** Test functions ***
def repeatCountIntPinNumListIntPeriod(intPinNumList, countPeriod, pauseTime, repeatTimes):
print('\n countIntPinNumListIntPeriod()')
intGpPinNumList = [0] * len(intPinNumList)
for index in range(len(intGpPinNumList)):
intGpPinNumList[index] = intGpPinNumDict[str(index)]
print(' intPinNumList =', intPinNumList)
print(' intGpPinNumList =', intGpPinNumList)
print(' countPeriod (seconds) =', countPeriod)
print(' pauseTime (seconds) =', pauseTime)
print(' repeat count times =', repeatTimes)
print('')
for count in range(repeatTimes):
ppsList = countIntPinNumListIntPeriod(intPinNumList, countPeriod)
print(' ppsList =', ppsList, end = '')
print(' , min ', min(ppsList), end = '')
print(' , max ', max(ppsList), end = '')
print(' , dif ', max(ppsList) - min(ppsList), end = '')
print(' , avg ', int(sum(ppsList) / len(ppsList)))
'''
rpmList = ppsList.copy()
for index in range(len(rpmList)):
rpmList[index] = int(((rpmList[index] / 12) / 90) * 10 * 60)
print(' rpmList =', rpmList, end = '')
print(' , min ', min(rpmList), end = '')
print(' , max ', max(rpmList), end = '')
print(' , avg ', int(sum(rpmList) / len(rpmList)))
'''
utime.sleep(pauseTime)
return
# *** Part 3 - TB6612FNG Motor Driver Functions ***
stdByPinNum0 = 8
stdByPinNum1 = 9
aIn1PinNum0 = 10
aIn2PinNum0 = 11
aPwmPinNum0 = 0
bIn1PinNum0 = 12
bIn2PinNum0 = 13
bPwmPinNum0 = 1
aIn1PinNum1 = 14
aIn2PinNum1 = 15
aPwmPinNum1 = 2
bIn1PinNum1 = 16
bIn2PinNum1 = 17
bPwmPinNum1 = 3
motorConfigDict00 = {'MotorDriverNum': 0, 'ChannelNum': 0}
motorConfigDict01 = {'MotorDriverNum': 0, 'ChannelNum': 1}
motorConfigDict10 = {'MotorDriverNum': 1, 'ChannelNum': 0}
motorConfigDict11 = {'MotorDriverNum': 1, 'ChannelNum': 1}
motorConfigDictList_00_01_10_11 = [motorConfigDict00, motorConfigDict01, motorConfigDict10, motorConfigDict11]
motorConfigDictList01 = motorConfigDictList_00_01_10_11
motorConfigDictListDict = {'FourMotorsList' : motorConfigDictList01,
}
motorDriverGpPinNumDict = { \
'0': {'StdByPinNum' : stdByPinNum0,
'0' : {'In1PinNum' : aIn1PinNum0,
'In2PinNum' : aIn2PinNum0,
'PwmPinNum' : aPwmPinNum0,
'PwmFreq' : 1000,
'DutyCycle' : 20,
},
'1' : {'In1PinNum' : bIn1PinNum0,
'In2PinNum' : bIn2PinNum0,
'PwmPinNum' : bPwmPinNum0,
'PwmFreq' : 1000,
'DutyCycle' : 20,
},
},
'1': {'StdByPinNum' : stdByPinNum1,
'0' : {'In1PinNum' : aIn1PinNum1,
'In2PinNum' : aIn2PinNum1,
'PwmPinNum' : aPwmPinNum1,
'PwmFreq' : 1000,
'DutyCycle' : 20,
},
'1' : {'In1PinNum' : bIn1PinNum1,
'In2PinNum' : bIn2PinNum1,
'PwmPinNum' : bPwmPinNum1,
'PwmFreq' : 1000,
'DutyCycle' : 20,
},
},
}
def setupMotorBasic(motorConfigDict):
motorDriverNum = motorConfigDict['MotorDriverNum']
channelNum = motorConfigDict['ChannelNum']
stdByPinNum = motorDriverGpPinNumDict[str(motorDriverNum)]['StdByPinNum']
in1PinNum = motorDriverGpPinNumDict[str(motorDriverNum)][str(channelNum)]['In1PinNum']
in2PinNum = motorDriverGpPinNumDict[str(motorDriverNum)][str(channelNum)]['In2PinNum']
stdByPin = Pin(stdByPinNum, Pin.OUT)
in1Pin = Pin(in1PinNum, Pin.OUT)
in2Pin = Pin(in2PinNum, Pin.OUT)
pwmPinNum = motorDriverGpPinNumDict[str(motorDriverNum)][str(channelNum)]['PwmPinNum']
pwmFreq = motorDriverGpPinNumDict[str(motorDriverNum)][str(channelNum)]['PwmFreq']
dutyCycle = motorDriverGpPinNumDict[str(motorDriverNum)][str(channelNum)]['DutyCycle']
pwmPin = PWM(Pin(pwmPinNum))
pwmPin.freq(pwmFreq)
u16DutyCycle = int((dutyCycle / 100) * 65536)
pwmPin.duty_u16(u16DutyCycle)
motorControlDict = {'StdByPin': stdByPin,
'In1Pin' : in1Pin,
'In2Pin' : in2Pin,
'PwmPin' : pwmPin,
}
return motorControlDict
dutyCycleDict = {
'VeryVerySlow' : 95,
'VeryFast' : 90,
'Fast' : 80,
'Normal' : 50,
'Slow' : 40,
'VerySlow' : 30,
'VeryVerySlow' : 25,
}
def setupMotorList(motorConfigDictList):
motorControlDictList = [0] * len(motorConfigDictList)
for index in range(len(motorConfigDictList)):
motorControlDict = setupMotorBasic(motorConfigDictList[index])
motorControlDictList[index] = motorControlDict
return motorControlDictList
def moveMotorDirectionSpeedList(motorControlDictList, directionName, speedName):
for motorControlDict in motorControlDictList:
moveMotorDirectionSpeed(motorControlDict, directionName, speedName)
return
def moveMotorDirectionSpeed(motorControlDict, directionName, speedName):
moveMotorDirection(motorControlDict, directionName)
moveMotorSpeed(motorControlDict, speedName)
return
def moveMotorDirection(motorControlDict, directionName):
if directionName =='Forward':
motorControlDict['In1Pin'].low()
motorControlDict['In2Pin'].high()
elif directionName == 'Backward':
motorControlDict['In1Pin'].high()
motorControlDict['In2Pin'].low()
return
def moveMotorSpeed(motorControlDict, speedName):
pwmPin = motorControlDict['PwmPin']
dutyCycle = dutyCycleDict[speedName]
pwmPin.duty_u16(int((dutyCycle / 100) * 65536) )
return
def stopMotor(motorControlDict):
motorControlDict['In1Pin'].low()
motorControlDict['In2Pin'].low()
return
def stopMotorList(motorControlDictList):
for motorControlDict in motorControlDictList:
stopMotor(motorControlDict)
return
def testSetupMoveMotorDirectionSpeedList(motorConfigDictListName, directionName, speedName, secondsName):
print('Begin testSetupMoveMotorList(), ...')
motorConfigDictList = motorConfigDictListDict[motorConfigDictListName]
motorControlDictList1 = setupMotorList(motorConfigDictList)
moveMotorDirectionSpeedList(motorControlDictList1, directionName, speedName)
utime.sleep(secondsDict[secondsName])
stopMotorList(motorControlDictList1)
print('End testSetupMoveMotorList(), ...')
return
# ========= ========= ========= ========= ========= ========= ========= =========
# ========= ========= ========= ========= ========= ========= ========= =========
# *** Main ***
testSetupMoveMotorDirectionSpeedList('FourMotorsList', 'Forward', 'VerySlow', 'TwoSeconds')
testSetupMoveMotorDirectionSpeedList('FourMotorsList', 'Backward', 'VeryFast', 'FourSeconds')
# *** End ***
Merging PWM and Interrupt Functions into Main Motor Control Functions
PWM functions have been merged and tested OK. Interrupt functions are to be tested.
Penzu complete listing of code: https://penzu.com/p/56eb8c7c
Interrupt count measuring OK (https://penzu.com/p/b176e88b)
>>> %Run -c $EDITOR_CONTENT
Begin testSetupMoveMotorList(), ...
After 2 seconds, ...
countIntPinNumListIntPeriod()
intPinNumList = [0, 1, 2, 3]
intGpPinNumList = [4, 5, 6, 7]
countPeriod (seconds) = 0.1
pauseTime (seconds) = 0.1
repeat count times = 10
countList = [294, 220, 300, 215] , min 215 , max 300 , dif 85 , avg 257
countList = [267, 226, 300, 210] , min 210 , max 300 , dif 90 , avg 250
countList = [284, 231, 301, 214] , min 214 , max 301 , dif 87 , avg 257
countList = [273, 229, 299, 213] , min 213 , max 299 , dif 86 , avg 253
countList = [290, 219, 301, 218] , min 218 , max 301 , dif 83 , avg 257
countList = [280, 224, 298, 217] , min 217 , max 298 , dif 81 , avg 254
countList = [302, 231, 298, 212] , min 212 , max 302 , dif 90 , avg 260
countList = [276, 216, 304, 216] , min 216 , max 304 , dif 88 , avg 253
countList = [295, 215, 298, 203] , min 203 , max 298 , dif 95 , avg 252
countList = [292, 214, 293, 210] , min 210 , max 293 , dif 83 , avg 252
End testSetupMoveMotorList(), ...
>>>
Scaling up 4WD with DC Motor x 4 to 6WD with BLDC Motor x 6
Now I am thinking of upgrading my 4WD to 6WD with BLDC motors. The BLDC motor has built in controllers, so there is no need to use any motor controllers. Some newbie is asking a question of testing BLDC motors, and I took the opportunity to do a little research and found it easy to expand the dictionaries for BLDC motors.
Brushless DC motor with built in controller – EESE, Asked 2021oct13
Part 5 – Using Rpi Pico and MicroPython to PWM control BLDC motor speed
Video = https://youtu.be/-omE34cMXj4
Test function =
```
def testBldcMotorV1():
print(' Begin testBldcMotor(), ...')
motorConfigDict = {'MotorDriverNum': 2, 'ChannelNum': 0}
motorControlDict = setupBldcMotor(motorConfigDict)
print(' Now start fast, ...')
hold('FourSeconds')
changeBldcMotorSpeed(motorControlDict, 'Normal')
print(' Now normal, ...')
hold('FourSeconds')
changeBldcMotorSpeed(motorControlDict, 'Slow')
print(' Now slow, ...')
hold('FourSeconds')
changeBldcMotorSpeed(motorControlDict, 'Fast')
print(' Now fast again, ...')
hold('FourSeconds')
changeBldcMotorSpeed(motorControlDict, 'Slow')
print(' Now slow again, ...')
hold('FourSeconds')
print(' End testSetupMotor(), ...')
return
```
Program listing and sample output = https://penzu.com/p/95b30513
Pico 6WD using BLDC motors
I found it easy to expand my 4WD DC motor project to 6WD using BLDC motor. So I am starting off with an A4 size acrylic plate as car body, and Aslong 2535 BLDC motors.
bldc_6wd_2021oct16021024×840 318 KB
I read my post of the result of careless wiring of BLDC motors, just to remind myself.
Brushless DC motor with built in controller – Asked 2021Oct13electronics.stackexchange.com
Brushless DC motor with built in controller
pwm, brushless-dc-motoranswered by tlfong01 on 11:17AM – 13 Oct 21 UTC
Part 6 – Aslong BLDC Postmortemaslong_bldc_2021oct17031024×658 172 KBaslong_bldc_2021oct17011024×595 185 KBaslong_bldc_2021oct17021024×542 134 KB
There you go, BLDC 6WD
bldc_6wd_2021oct17021024×701 248 KB
Testing 4WD, to be scaled up to 6WD
For prototyping, I am testing just 4 motors, instead of 6, so maximum risk is frying 4 motors, instead of 6.
The testing video: https://youtu.be/fKe3huM2Qqc
4WD BLDC motors encoder signals (FG)
Now I am checking out the encoder signals (FG) of the 4 BLDC motors. I powered the four motor with the same 12V PSU and use my quad channel scope to display the encoder output waveforms, as show below. I know the motor speed is 107 rpm. I need to work back the pulses per revolution.
bldc_encoder_2021oct18011134×480 154 KB
Calibrating 4WD BLDC – Speed vs PWM duty cyclebldc_test_2021oct19011024×688 188 KBbldc_test_2021oct19021024×690 184 KBbldc_test_2021oct19031024×807 239 KBbldc_test_2021oct19041024×382 136 KB
Notes
- 4 motors with only power, no PWM, tested OK.
- Now going to test PWM duty cycle vs speed, for one motor only.
IEEE Spectrum Smart Cars Than Think
I have been reading the above IEEE Spectrum articles for a couple of years, thinking that I might borrow ideas from them.
IEEE Cars That Think – IEEE Spectrum
Big Aslong BLDC Motor Control Signals and PWM vs Speed Calibration
bldc_test_2021oct20011024×1045 328 KBbldc_test_2021oct20021024×696 194 KBbldc_test_2021oct20031024×522 172 KB
Aslong BLDC JGB37-2525 Spec
Now I am studying the BLDC spec, before calibrating things.aslong_spec_2021oct20021024×752 207 KB
aslong_spec_2021oct2003912×677 132 KB
Calibrating PWM duty cycle vs mot speed (FG (encoder) pulses per second)
Now I am using PWM 1kHz 90% duty cycle to measure the speed of 19 pulses per secondpwm_bldc_test_2021oct20011024×626 214 KBpwm_bldc_test_2021oct20021024×342 135 KB
Range of duty cycle when controlling Aslong BLDC motor speed
I found the range is approximately 37% to 100%. I think 99% or 100% should be the same as DC without PWM (to verify later). I also found that the motor slows down as duty cycle goes low.
At around 40%, the motor moves very slowly, and at 37%, the motor comes to stand still.
Again, I need to read the FG (encoder pulses) to get the precise motor speed.
433MHz RF Communication among Pico 4WDs
Now I am thinking of letting the Pico 4WDs to talk to each other using 433MHz transmitter (FS1000A) and receivers (MX05V) The feasibility study is satisfactory. The Pico sends a text message through GP0 (uart0 TxD) and received from GP1 (uart0 RxD). The hardware setup is shown below:fs1000a_mx05v_test_2021oct28011024×1165 464 KB
4WD 433MHz FS1000A/MX05V RF Communication References
Transmitting and Receiving messages through RF433 using Raspberry Pico – RpiSE, Asked 2021oct21
Chat: https://chat.stackexchange.com/rooms/130758/discussion-between-tlfong01-and-antifa
HC12 UART 433MHz transceiver testing notes
JBtek Windows 8 Supported Debug Cable for Raspberry Pi USB Programming USB to TTL Serial Cable – Amazon US$7
amazon.com

Amazon.com: JBtek Windows 8 Supported Debug Cable for Raspberry Pi USB…
Buy JBtek Windows 8 Supported Debug Cable for Raspberry Pi USB Programming USB to TTL Serial Cable: USB Cables – Amazon.com ✓ FREE DELIVERY possible on eligible purchases
PL2303XHD Datasheet – Prolific 2023
http://www.prolific.com.tw/UserFiles/files/ds_pl2303HXD_v1_4_4.pdf
The power pin provides 500mA directly from the USB port and the RX/TX pins are 3.3V level for interfacing with the most common 3.3V logic level chipsets
Windows XP/Vista/7 & Windows 8 supported, MacOS X; PL2303 TA. drivers on your computer and connect with a terminal program at 115200 baud
Red cable : +5V
Black cable : GND
Green cable : TXD
White cable : RXD
Yellow cable : RTS
Blue cable : CTS
hc12_202aoct3001827×589 124 KBhc12_202aoct30021024×603 193 KBhc12_202aoct30031024×668 181 KBhc12_202aoct30041024×546 202 KB
RealTerm Configuring HC12 433MHz Transceiver Recordhc12_real_term-TEST_2021oct3001718×393 141 KBhc12_real_term-TEST_2021oct3002720×392 125 KBhc12_real_term-TEST_2021oct3003716×391 143 KB
Pico 4WD BLDC Quad HC12 433MHz RF Transceiver Setup Noteshc12_2021nov01011024×872 248 KBhc12_2021nov01021024×1108 332 KB
Dual HC12 RF transceiver setup notesdual_hc12_setup_2021nov0302692×714 184 KBdual_hc12_setup_2021nov03031024×851 343 KB
HC12 at RealTerm COM10 transceiving to/from HC12 at RealTerm COM9 Tested OK
hc12_real_term-TEST_2021oct3004689×887 163 KB
Testing HC12 #1 at Pico 1’s uart0 transceiving HC12 #2 at same Pico 1’s uart1
Now I am going to test if two HC12’s (on the same bread board, separated by 1 cm), controlled by two UART’s (uart0, uart1) of the same Pico can transmit/receive at RF 433MHz without any problem.
/ to continue, …ReplyShareBookmarkFlagReplyWatchingYou will receive notifications because you created this topic.
Suggested Topics
Want to read more? Browse other topics in Projects or view latest topics.
Categories: Uncategorized