There are two folders under /home/pi: SunFounder_PiCar for controlling motors and steering and SunFounder_PiCar-V for pan/tilt and wireless control. Here look into the code of PiCar-V.
Since too many contents and instructions are involved in the code, we will not cover every detail. For more knowledge about Python 2, Python 3, Django, HTML, and CSS in the programs, you can visit related websites or buy books to learn by yourself. In the following part, we will go through the overall structure and the process in brief.
First, let’s check the files in the code folder:
.gitis a hidden directory to store all the information of a Git repository; it’s generated automatically after you create the repository.
Ball_trackis used to let the car follow the red ball.
datasheetstores the manual of some chips used in the hardware modules.
mjpg-streameris an open source streaming media library, through which the data of the camera is transferred.
Remote_controlis to store the code of the web server; it controls the motor and servo of the car based on the API request.
.gitignorerecords the requests of file types to be ignored when the Github repository is synchronized.
_init_.pyis automatically generated when you create a project which is a standard necessary document of python package, just leave it there.
i2cHelper.pyis a Python script written by Python 2 to configure and detect the I2C connection.
install_dependencies, an executable bash script for simple installation and environment configuration.
LICENSE, as the name suggests, is a text file of GNU V2 license.
showrecord some information normally for statement and prompts.
The server code is based on Django 1.10 (adapt to the latest release if needed). If you are interested in this, you can visit the Django website https://www.djangoproject.com/. Here we will just learn how the web server works.
The code may be updated irregularly on Github to fix bugs and release some functions update. So the code here is the initial version. You can view the updates in the Github repository at:
Open the code directory and check the file by
pi@raspberry:~ $ cd SunFounder_PiCar-V/ pi@raspberry:~/SunFounder_PiCar-V $ ls datasheet install_dependencies mjpg-streamer remote_control client i2cHelper.py LICENSE README.md show
remote_control is the main code directory of the web server. Open the
code directory by cd
remote_control, and check the file by ls:
pi@raspberry:~/SunFounder_PiCar-V $ cd remote_control pi@raspberry:~/SunFounder_PiCar-V/remote_control $ ls db.sqlite3 manage.py remote_control start static
db.sqlite3is generated when you create a Django project.
manage.pyis the main program of the Django project and is generated when the project is created. It normally does not need to be modified.
remote_controlincludes the main code files.
startis a small script written to run
sudo python manage.py runserver 0.0.0.0:8000, and servo installation with attribute
installjust for convenience.
staticis to store some static pictures on the web.
The Django web server normally runs
sudo python manage.py runserver to
start. The address 0.0.0.0:8000 means the listening address covers all
the addresses on the LAN, and the port number is 8000. Here we will just
focus on the code in
remote_control folder. Go to the directory via
pi@raspberry:~/SunFounder_PiCar-V/remote_control $ cd remote_control pi@raspberry:~/SunFounder_PiCar-V/remote_control/remote_control $ ls driver \__init__.py settings.py templates urls.py views.py wsgi.py
driverstores the drivers of the car.
__init__.pyis automatically generated when you create a Django project which is a standard necessary document of python package, just leave it there.
settings.pyis automatically generated and stores the related settings.
templatesis a Django app for storing the webs in the html format.
urls.pyis generated automatically to configure the URL to associate with the code.
views.pyis the code for page control which is associated by the URL. It calls the templates to show the page and the driver to control the car.
wsgi.pyis generated automatically and does not need changes. For more, please visit the official website of Django.
So here is how the code works: Run the main program
manage.py which will
be associated with
urls.py automatically, to respond to the URL. When
you run the web browser like the Chrome to visit
http://<rpi_ip_address>:<port> or visit the configured API via the
manage.py will turn to
views.py due to the association of
urls.py. Then the
views.py processes this and returns the
templates to the browser. In addition, it will call the
on the basis of the parameters set in the browser to control the car.
Now open the folder
driver and check:
pi@raspberry:~/SunFounder_PiCar-V/remote_control/remote_control $ cd driver/ pi@raspberry:~/SunFounder_PiCar-V/remote_control/remote_control/driver $ ls camera.py config \__init__.py stream.py
driver folder mainly includes the driver modules for controlling the
pan and tilt and camera streamer.
camera.py for controlling the pan-and-tilt.
config stores the calibration data.
__init__.py is the essential file of the package and you can just leave it alone.
stream.py is a video streaming service based on the MJPG-streamer.
Exit and open the folder
templates to view:
pi@raspberry:~/SunFounder_PiCar-V/remote_control/remote_control/driver $ cd ../ pi@raspberry:~/SunFounder_PiCar-V/remote_control/remote_control $ cd templates/ admin.py \__init__.py models.py tests.py apps.py migrations templates views.py
This folder is created by the
manage.py startapp just for calling the
templates conveniently. Therefore, the files have not been changed
except for the
templates. Open the
pi@raspberry:~/SunFounder_PiCar-V/remote_control/remote_control/templates $ cd templates pi@raspberry:~/SunFounder_PiCar-V/remote_control/remote_control/templates/templates $ ls base.html cali.html run.html
There are three HTML files that also consist of layers. The low level
base.html stores contents contained on each page such as the
HTML, the overall layout, and contents of the home page by default. The
cali.html for calibration and
run.html to control the