Tutorial
Tutorial
Tutorial
com I
Getting Started
Tutorial.pdf
It contains basic operations such as installing system for Raspberry Pi.
The code in this PDF is in C and Python.
Processing.pdf in Freenove_Basic_Starter_Kit_for_Raspberry_Pi\Processing
The code in this PDF is in Java.
Some chips and modules are inserted into the breadboard to protect their pins.
You need to remove them from breadboard before use. (There is no need to remove GPIO Extension Board.)
Please find a tool (like a little screw driver) to handle them like below:
support@freenove.com █
II support@freenove.com www.freenove.com █
Freenove provides free and responsive product and technical support, including but not limited to:
Product quality issues
Product use and build issues
Questions regarding the technology employed in our products for learning and education
Your input and opinions are always welcome
We also encourage your ideas and suggestions for new products and product improvements
For any of the above, you may send us an email to:
support@freenove.com
Safety and Precautions
Please follow the following safety precautions when using or storing this product:
Keep this product out of the reach of children under 6 years old.
This product should be used only when there is adult supervision present as young children lack
necessary judgment regarding safety and the consequences of product misuse.
This product contains small parts and parts, which are sharp. This product contains electrically conductive
parts. Use caution with electrically conductive parts near or around power supplies, batteries and
powered (live) circuits.
When the product is turned ON, activated or tested, some parts will move or rotate. To avoid injuries to
hands and fingers, keep them away from any moving parts!
It is possible that an improperly connected or shorted circuit may cause overheating. Should this happen,
immediately disconnect the power supply or remove the batteries and do not touch anything until it
█ support@freenove.com
█ www.freenove.com support@freenove.com III
cools down! When everything is safe and cool, review the product tutorial to identify the cause.
Only operate the product in accordance with the instructions and guidelines of this tutorial, otherwise
parts may be damaged or you could be injured.
Store the product in a cool dry place and avoid exposing the product to direct sunlight.
After use, always turn the power OFF and remove or unplug the batteries before storing.
About Freenove
Freenove is committed to assist customers in their education of robotics, programming and electronic circuits
so that they may transform their creative ideas into prototypes and new and innovative products. To this end,
our services include but are not limited to:
Educational and Entertaining Project Kits for Robots, Smart Cars and Drones
Educational Kits to Learn Robotic Software Systems for Arduino, Raspberry Pi and micro: bit
Electronic Component Assortments, Electronic Modules and Specialized Tools
Product Development and Customization Services
You can find more about Freenove and get our latest news and updates through our website:
http://www.freenove.com
Copyright
All the files, materials and instructional guides provided are released under Creative Commons Attribution-
NonCommercial-ShareAlike 3.0 Unported License. A copy of this license can be found in the folder containing
the Tutorial and software files associated with this product.
This means you can use these resource in your own derived works, in part or completely, but NOT for the
intent or purpose of commercial use.
Freenove brand and logo are copyright of Freenove Creative Technology Co., Ltd. and cannot be used without
written permission.
○
R
support@freenove.com █
IV support@freenove.com www.freenove.com █
Contents
Getting Started ................................................................................................................................................................... I
Remove the Chips.............................................................................................................................................................. I
Safety and Precautions ............................................................................................................................................... II
About Freenove .......................................................................................................................................................... III
Copyright ..................................................................................................................................................................... III
Contents ............................................................................................................................................................................. IV
Preface .................................................................................................................................................................................. 1
Raspberry Pi ........................................................................................................................................................................ 2
Installing an Operating System ................................................................................................................................... 9
Component List............................................................................................................................................................ 9
Optional Components .............................................................................................................................................. 11
Raspberry Pi OS ......................................................................................................................................................... 13
Getting Started with Raspberry Pi .......................................................................................................................... 18
Chapter 0 Preparation...................................................................................................................................................27
Linux Command ......................................................................................................................................................... 27
Install WiringPi............................................................................................................................................................ 30
Obtain the Project Code........................................................................................................................................... 32
Python2 & Python3 ................................................................................................................................................... 33
Chapter 1 LED ..................................................................................................................................................................35
Project 1.1 Blink.......................................................................................................................................................... 35
Freenove Car, Robot and other products for Raspberry Pi ............................................................................... 57
Chapter 2 Buttons & LEDs ...........................................................................................................................................58
Project 2.1 Push Button Switch & LED ................................................................................................................... 58
Project 2.2 MINI Table Lamp ................................................................................................................................... 65
Chapter 3 LED Bar Graph .............................................................................................................................................71
Project 3.1 Flowing Water Light .............................................................................................................................. 71
Chapter 4 Analog & PWM ...........................................................................................................................................77
Project 4.1 Breathing LED......................................................................................................................................... 77
Chapter 5 RGB LED .........................................................................................................................................................85
Project 5.1 Multicolored LED ................................................................................................................................... 86
Chapter 6 Buzzer .............................................................................................................................................................92
Project 6.1 Doorbell .................................................................................................................................................. 92
Project 6.2 Alertor...................................................................................................................................................... 99
Chapter 7 Web IoT ...................................................................................................................................................... 104
Project 7.1 Remote LED .......................................................................................................................................... 104
What's Next? ................................................................................................................................................................. 109
█ support@freenove.com
█ www.freenove.com support@freenove.com 1
Preface
Raspberry Pi is a low cost, credit card sized computer that plugs into a computer monitor or TV, and uses a
standard keyboard and mouse. It is an incredibly capable little device that enables people of all ages to explore
computing, and to learn how to program in a variety of computer languages like Scratch and Python. It is
capable of doing everything you would expect from a desktop computer, such as browsing the internet,
playing high-definition video content, creating spreadsheets, performing word-processing, and playing video
games. For more information, you can refer to Raspberry Pi official website. For clarification, this tutorial will
also reference Raspberry Pi as RPi, RPI and RasPi.
In this tutorial, most chapters consist of Components List, Component Knowledge, Circuit, and Code (C
code and Python code). We provide both C and Python code for each project in this tutorial. After completing
this tutorial, you can learn Java by reading Processing.pdf.
This kit does not contain Raspberry and its accessories. You can also use the components and modules in
this kit to create projects of your own design.
Additionally, if you encounter any issues or have questions about this tutorial or the contents of kit, you can
always contact us for free technical support at:
support@freenove.com
support@freenove.com █
2 support@freenove.com www.freenove.com █
Raspberry Pi
So far, at this writing, Raspberry Pi has advanced to its fourth generation product offering. Version changes
are accompanied by increases in upgrades in hardware and capabilities.
The A type and B type versions of the first generation products have been discontinued due to various reasons.
What is most important is that other popular and currently available versions are consistent in the order and
number of pins and their assigned designation of function, making compatibility of peripheral devices greatly
enhanced between versions.
Below are the raspberry pi pictures and model pictures supported by this product. They have 40 pins.
Actual image of Raspberry Pi 4 Model B: CAD image of Raspberry Pi 4 Model B:
█ support@freenove.com
█ www.freenove.com support@freenove.com 3
Actual image of Raspberry Pi 3 Model B+: CAD image of Raspberry Pi 3 Model B+:
support@freenove.com █
4 support@freenove.com www.freenove.com █
Actual image of Raspberry Pi 1 Model B+: CAD image of Raspberry Pi 1 Model B+:
█ support@freenove.com
█ www.freenove.com support@freenove.com 5
Actual image of Raspberry Pi 3 Model A+: CAD image of Raspberry Pi 3 Model A+:
Actual image of Raspberry Pi 1 Model A+: CAD image of Raspberry Pi 1 Model A+:
support@freenove.com █
6 support@freenove.com www.freenove.com █
█ support@freenove.com
█ www.freenove.com support@freenove.com 7
GPIO
Connector Ethernet
Connector
Display
Connector
USB
Power Connector x4
Connector
GPIO
Connector
USB
Connector
Display
Connector
Ethernet
Power Connector
Connector
support@freenove.com █
8 support@freenove.com www.freenove.com █
GPIO
Connector
USB
Display Connector
Connector
Power
Connector
GPIO
Connector
Camera
Connector
█ support@freenove.com
█ www.freenove.com support@freenove.com 9
Component List
Required Components
Any Raspberry Pi with 40 GPIO 5V/3A Power Adapter. Note: Different versions of
Raspberry Pi have different power requirements
(please check the power requirements for yours
on the chart in the following page.)
Micro or Type-C USB Cable x1 Micro SD Card (TF Card) x1, Card Reader x1
support@freenove.com █
10 support@freenove.com www.freenove.com █
In addition, RPi also needs an Ethernet network cable used to connect it to a WAN (Wide Area Network).
All these components are necessary for any of your projects to work. Among them, the power supply of at
least 5V/2.5A, because a lack of a sufficient power supply may lead to many functional issues and even
damage your RPi, we STRONGLY RECOMMEND a 5V/2.5A power supply. We also recommend using a SD
Micro Card with a capacity of 16GB or more (which, functions as the RPI’s “hard drive”) and is used to store
the operating system and necessary operational files.
█ support@freenove.com
█ www.freenove.com support@freenove.com 11
Optional Components
Under normal circumstances, there are two ways to login to Raspberry Pi: 1) Using a stand-alone monitor. 2)
Using a remote desktop or laptop computer monitor “sharing” the PC monitor with your RPi.
If you choose to use an independent monitor, mouse and keyboard, you also need the following accessories:
1. A display with a HDMI interface
2. A Mouse and a Keyboard with an USB interface
For different Raspberry Pi Modules, the optional items may vary slightly but they all aim to convert the
interfaces to Raspberry Pi standards.
Pi Zero Pi
Pi Zero Pi A+ Pi 3A+ Pi B+/2B Pi 4B
W 3B/3B+
Monitor Yes (All)
Mouse Yes (All)
Keyboard Yes (All)
Micro-HDMI to HDMI
Yes No Yes No No No No
Adapter & Cable
Micro-HDMI to HDMI
No Yes
Adapter & Cable
Micro-USB to USB-A
Adapter & Cable
Yes No Yes No
(Micro USB OTG
Cable)
USB HUB Yes Yes Yes Yes No No
USB to Ethernet select one from Internal
optional
Interface two or select two Integration Internal Integration
USB Wi-Fi Receiver from two Internal Integration optional
support@freenove.com █
12 support@freenove.com www.freenove.com █
If you do not have an independent monitor, or if you want to use a remote desktop, you first need to login
to Raspberry Pi through SSH, and then open the VNC or RDP service. This requires the following accessories.
█ support@freenove.com
█ www.freenove.com support@freenove.com 13
Raspberry Pi OS
Automatically Method
You can follow the official method to install the system for raspberry pi via visiting link below:
https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up/2
In this way, the system will be downloaded automatically via the application.
Manually Method
After installing the Imager Tool in the link above. You can also download the system manually first.
Visit https://www.raspberrypi.org/downloads/
support@freenove.com █
14 support@freenove.com www.freenove.com █
Then open imager toll. Choose system that you just downloaded in Use custom.
█ support@freenove.com
█ www.freenove.com support@freenove.com 15
support@freenove.com █
16 support@freenove.com www.freenove.com █
█ support@freenove.com
█ www.freenove.com support@freenove.com 17
Insert SD card
Then remove SD card from card reader and insert it into Raspberry Pi.
support@freenove.com █
18 support@freenove.com www.freenove.com █
Monitor desktop
If you do not have a spare monitor, please skip to next section Remote desktop & VNC. If you have a spare
monitor, please follow the steps in this section.
After the system is written successfully, take out Micro SD Card and put it into the SD card slot of RPi. Then
connect your RPi to the monitor through the HDMI port, attach your mouse and keyboard through the USB
ports, attach a network cable to the network port and finally, connect your power supply (making sure that it
meets the specifications required by your RPi Module Version. Your RPi should start (power up). Later, after
setup, you will need to enter your user name and password to login. The default user name: pi; password:
raspberry. After login, you should see the following screen.
Congratulations! You have successfully installed the RASPBERRY PI OS operating system on your RPi.
Raspberry Pi 4B, 3B+/3B integrates a Wi-Fi adaptor. You can use it to connect to your Wi-Fi. Then you can
use the wireless remote desktop to control your RPi. This will be helpful for the following work. Raspberry Pi
of other models can use wireless remote desktop through accessing an external USB wireless card.
Connect WiFi
█ support@freenove.com
█ www.freenove.com support@freenove.com 19
If you have logged in Raspberry Pi via display, you can skip to VNC Viewer.
If you don't have a spare display, mouse and keyboard for your RPi, you can use a remote desktop to share
a display, keyboard, and mouse with your PC. Below is how to use:
MAC OS remote desktop and Windows OS remote desktop.
MAC OS Remote Desktop
Open the terminal and type following command. If this command doesn’t work, please move to next page.
ssh pi@raspberrypi.local
The password is raspberry by default, case sensitive.
support@freenove.com █
20 support@freenove.com www.freenove.com █
█ support@freenove.com
█ www.freenove.com support@freenove.com 21
support@freenove.com █
22 support@freenove.com www.freenove.com █
█ support@freenove.com
█ www.freenove.com support@freenove.com 23
Set Resolution
You can also set other resolutions. If you don’t know what to set, you can set it as 1280x720 first.
Then download and install VNC Viewer according to your computer system by click following link:
https://www.realvnc.com/en/connect/download/viewer/
After installation is completed, open VNC Viewer. And click File New Connection. Then the interface is
shown below.
support@freenove.com █
24 support@freenove.com www.freenove.com █
Enter ip address of your Raspberry Pi and fill in a name. Then click OK.
Then on the VNC Viewer panel, double-click new connection you just created,
█ support@freenove.com
█ www.freenove.com support@freenove.com 25
In addition, your VNC Viewer window may zoom your Raspberry Pi desktop. You can change it. On your
VNC View control panel, click right key. And select Properties->Options label->Scaling. Then set proper
scaling.
support@freenove.com █
26 support@freenove.com www.freenove.com █
Here, you have logged in to Raspberry Pi successfully by using VNC Viewer and operated proper setting.
Raspberry Pi 4B/3B+/3B integrates a Wi-Fi adaptor.If you did not connect Pi to WiFi. You can connect it to
wirelessly control the robot.
█ support@freenove.com
█ www.freenove.com support@freenove.com 27
Chapter 0 Preparation
Why “Chapter 0”? Because in program code the first number is 0. We choose to follow this rule. In this chapter,
we will do some necessary foundational preparation work: Start your Raspberry Pi and install some necessary
libraries.
Linux Command
Raspberry Pi OS is based on the Linux Operation System. Now we will introduce you to some frequently used
Linux commands and rules.
First, open the Terminal. All commands are executed in Terminal.
Terminal
support@freenove.com █
28 support@freenove.com www.freenove.com █
The ”ls” command lists information about the files (the current directory by default).
Content between “$” and ”pi@raspberrypi:” is the current working path. “~” represents the user directory,
which refers to “/home/pi” here.
Later in this Tutorial, we will often change the working path. Typing commands under the wrong directory
may cause errors and break the execution of further commands.
Many frequently used commands and instructions can be found in the following reference table.
Command instruction
ls Lists information about the FILEs (the current directory by default) and entries
alphabetically.
cd Changes directory
sudo + cmd Executes cmd under root authority
./ Under current directory
gcc GNU Compiler Collection
git clone URL Use git tool to clone the contents of specified repository, and URL in the repository address.
There are many commands, which will come later. For more details about commands. You can refer to:
http://www.linux-commands-examples.com
█ support@freenove.com
█ www.freenove.com support@freenove.com 29
Shortcut Key
Now, we will introduce several commonly used shortcuts that are very useful in Terminal.
1. Up and Down Arrow Keys: Pressing “↑” (the Up key) will go backwards through the command history and
pressing “↓” (the Down Key) will go forwards through the command history.
2. Tab Key: The Tab key can automatically complete the command/path you want to type. When there is only
one eligible option, the command/path will be completely typed as soon as you press the Tab key even you
only type one character of the command/path.
As shown below, under the '~' directory, you enter the Documents directory with the “cd” command. After
typing “cd D”, pressing the Tab key (there is no response), pressing the Tab key again then all the files/folders
that begin with “D” will be listed. Continue to type the letters "oc" and then pressing the Tab key, the
“Documents” is typed automatically.
support@freenove.com █
30 support@freenove.com www.freenove.com █
Install WiringPi
WiringPi is a GPIO access library written in C language for the used in the Raspberry Pi.
To install the WiringPi library, please open the Terminal and then follow the steps and commands below.
Note: For a command containing many lines, execute them one line at a time.
Enter the following commands one by one in the terminal to install WiringPi:
sudo apt-get update
git clone https://github.com/WiringPi/WiringPi
cd WiringPi
./build
█ support@freenove.com
█ www.freenove.com support@freenove.com 31
support@freenove.com █
32 support@freenove.com www.freenove.com █
After the above installation is completed, you can visit our official website (http://www.freenove.com) or our
GitHub resources at (https://github.com/freenove) to download the latest available project code. We provide
both C language and Python language code for each project to allow ease of use for those who are skilled
in either language.
This folder name seems a little too long. We can simply rename it by using the following command.
mv Freenove_Basic_Starter_Kit_for_Raspberry_Pi/ Freenove_Kit/
If you have no experience with Python, we suggest that you refer to this website for basic information and
knowledge.
https://python.swaroopch.com/basics.html
█ support@freenove.com
█ www.freenove.com support@freenove.com 33
Python code, used in our kits, can now run on Python2 and Python3. Python3 is recommend. If you want to
use Python2, please make sure your Python version is 2.7 or above. Python2 and Python3 are not fully
compatible. However, Python2.6 and Python2.7 are transitional versions to python3, therefore you can also
use Python2.6 and 2.7 to execute some Python3 code.
You can type “python2” or “python3” respectively into Terminal to check if python has been installed. Press
Ctrl-Z to exit.
If you want to use Python3 in Raspberry Pi, it is recommended to set python3 as default Python by following
the steps below.
1. Enter directory /usr/bin
cd /usr/bin
2. Delete the old python link.
sudo rm python
3. Create new python links to python3.
sudo ln -s python3 python
4. Execute python to check whether the link succeeds.
python
support@freenove.com █
34 support@freenove.com www.freenove.com █
If you want to use Python2, repeat the steps above and just change the third command to the following:
sudo ln -s python2 python
We will only use the term “Python” without reference to Python2 or Python3. You can choose to use either.
Finally, all the necessary preparations have been completed! Next, we will combine the RPi and electronic
components to build a series of projects from easy to the more challenging and difficult as we focus on
learning the associated knowledge of each electronic circuit.
█ support@freenove.com
█ www.freenove.com support@freenove.com 35
Chapter 1 LED
This chapter is the Start Point in the journey to build and explore RPi electronic projects. We will start with
simple “Blink” project.
Component List
Breadboard x1
support@freenove.com █
36 support@freenove.com www.freenove.com █
In the components list, 3B GPIO, Extension Shield Raspberry and Breadboard are necessary for each project.
Later, they will be reference by text only (no images as in above).
GPIO
GPIO: General Purpose Input/Output. Here we will introduce the specific function of the pins on the Raspberry
Pi and how you can utilize them in all sorts of ways in your projects. Most RPi Module pins can be used as
either an input or output, depending on your program and its functions.
When programming GPIO pins there are 3 different ways to reference them: GPIO Numbering, Physical
Numbering and WiringPi GPIO Numbering.
█ support@freenove.com
█ www.freenove.com support@freenove.com 37
For more details about pin definition of GPIO, please refer to http://pinout.xyz/
PHYSICAL Numbering
Another way to refer to the pins is by simply counting across and down from pin 1 at the top left (nearest to
the SD card). This is 'Physical Numbering', as shown below:
support@freenove.com █
38 support@freenove.com www.freenove.com █
█ support@freenove.com
█ www.freenove.com support@freenove.com 39
You can also use the following command to view their correlation.
gpio readall
support@freenove.com █
40 support@freenove.com www.freenove.com █
Circuit
First, disconnect your RPi from the GPIO Extension Shield. Then build the circuit according to the circuit and
hardware diagrams. After the circuit is built and verified correct, connect the RPi to GPIO Extension Shield.
CAUTION: Avoid any possible short circuits (especially connecting 5V or GND, 3.3V and GND)!
WARNING: A short circuit can cause high current in your circuit, create excessive component heat and cause
permanent damage to your RPi!
Schematic diagram
PHYSICAL GPIO Numbering
BCM GPIO Numbering
The code uses this one.
Hardware connection. If you need any support, please contact us via: support@freenove.com
Longer Pin
Note:
Do NOT rotate Raspberry Pi to change the way of this connection.
Please plug T extension fully into breadboard.
█ support@freenove.com
█ www.freenove.com support@freenove.com 41
If you have a fan, you can connect it to 5V GND of breadboard via jumper wires.
support@freenove.com █
42 support@freenove.com www.freenove.com █
Future hardware connection diagrams will only show that part of breadboard and GPIO Extension Shield.
█ support@freenove.com
█ www.freenove.com support@freenove.com 43
Component knowledge
LED
An LED is a type of diode. All diodes only work if current is flowing in the correct direction and have two Poles.
An LED will only work (light up) if the longer pin (+) of LED is connected to the positive output from a power
source and the shorter pin is connected to the negative (-) output, which is also referred to as Ground (GND).
This type of component is known as “Polar” (think One-Way Street).
All common 2 lead diodes are the same in this respect. Diodes work only if the voltage of its positive electrode
is higher than its negative electrode and there is a narrow range of operating voltage for most all common
diodes of 1.9 and 3.4V. If you use much more than 3.3V the LED will be damaged and burnt out.
Note: LEDs cannot be directly connected to a power supply, which usually ends in a damaged component. A
resistor with a specified resistance value must be connected in series to the LED you plan to use.
Resistor
Resistors use Ohms (Ω) as the unit of measurement of their resistance (R). 1MΩ=1000kΩ, 1kΩ=1000Ω.
A resistor is a passive electrical component that limits or regulates the flow of current in an electronic circuit.
On the left, we see a physical representation of a resistor, and the right is the symbol used to represent the
presence of a resistor in a circuit diagram or schematic.
The bands of color on a resistor is a shorthand code used to identify its resistance value. For more details of
resistor color codes, please refer to the card in the kit package.
With a fixed voltage, there will be less current output with greater resistance added to the circuit. The
relationship between Current, Voltage and Resistance can be expressed by this formula: I=V/R known as
Ohm’s Law where I = Current, V = Voltage and R = Resistance. Knowing the values of any two of these allows
you to solve the value of the third.
In the following diagram, the current through R1 is: I=U/R=5V/10kΩ=0.0005A=0.5mA.
support@freenove.com █
44 support@freenove.com www.freenove.com █
WARNING: Never connect the two poles of a power supply with anything of low resistance value (i.e. a
metal object or bare wire) this is a Short and results in high current that may damage the power supply and
electronic components.
Note: Unlike LEDs and Diodes, Resistors have no poles and re non-polar (it does not matter which direction
you insert them into a circuit, it will work the same)
Breadboard
Here we have a small breadboard as an example of how the rows of holes (sockets) are electrically attached.
The left picture shows the ways the pins have shared electrical connection and the right picture shows the
actual internal metal, which connect these rows electrically.
█ support@freenove.com
█ www.freenove.com support@freenove.com 45
support@freenove.com █
46 support@freenove.com www.freenove.com █
Code
According to the circuit, when the GPIO17 of RPi output level is high, the LED turns ON. Conversely, when the
GPIO17 RPi output level is low, the LED turns OFF. Therefore, we can let GPIO17 cycle output high and output
low level to make the LED blink. We will use both C code and Python code to achieve the target.
█ support@freenove.com
█ www.freenove.com support@freenove.com 47
You can also use the file browser. On the left of folder tree, right-click the folder you want to enter, and click
"Open in Terminal".
You can press “Ctrl+C” to end the program. The following is the program code:
1 #include <wiringPi.h>
2 #include <stdio.h>
3
4 #define ledPin 0 //define the led pin number
5
6 void main(void)
7 {
8 printf("Program is starting ... \n");
9
10 wiringPiSetup(); //Initialize wiringPi.
11
12 pinMode(ledPin, OUTPUT);//Set the pin mode
13 printf("Using pin%d\n",%ledPin); //Output information on terminal
14 while(1){
15 digitalWrite(ledPin, HIGH); //Make GPIO output HIGH level
16 printf("led turned on >>>\n"); //Output information on terminal
17 delay(1000); //Wait for 1 second
18 digitalWrite(ledPin, LOW); //Make GPIO output LOW level
19 printf("led turned off <<<\n"); //Output information on terminal
20 delay(1000); //Wait for 1 second
21 }
22 }
support@freenove.com █
48 support@freenove.com www.freenove.com █
In the code above, the configuration function for GPIO is shown below as:
void pinMode(int pin, int mode);
This sets the mode of a pin to either INPUT, OUTPUT, PWM_OUTPUT or GPIO_CLOCK. Note that only
wiringPi pin 1 (BCM_GPIO 18) supports PWM output and only wiringPi pin 7 (BCM_GPIO 4) supports CLOCK
output modes.
This function has no effect when in Sys mode. If you need to change the pin mode, then you can do it with
the gpio program in a script before you start your program
void digitalWrite (int pin, int value);
Writes the value HIGH or LOW (1 or 0) to the given pin, which must have been previously set as an output.
For more related wiringpi functions, please refer to http://wiringpi.com/reference/
GPIO connected to ledPin in the circuit is GPIO17 and GPIO17 is defined as 0 in the wiringPi numbering. So
ledPin should be defined as 0 pin. You can refer to the corresponding table in Chapter 0.
#define ledPin 0 //define the led pin number
GPIO Numbering Relationship
WingPi BCM(Extension) Physical BCM(Extension) WingPi
3.3V 3.3V 1 2 5V 5V
8 SDA1 3 4 5V 5V
9 SCL1 5 6 GND GND
7 GPIO4 7 8 GPIO14/TXD0 15
GND GND 9 10 GPIO15/RXD0 16
0 GPIO17 11 12 GPIO18 1
2 GPIO27 13 14 GND GND
3 GPIO22 15 16 GPIO23 4
3.3V 3.3V 17 18 GPIO24 5
12 GPIO10/MOSI) 19 20 GND GND
13 GPIO9/MOIS 21 22 GPIO25 6
14 GPIO11/SCLK 23 24 GPIO8 /CE0 10
GND GND 25 26 GPIO7 CE1 11
30 GPIO0/SDA0 27 28 GPIO1 /SCL0 31
21 GPIO5 29 30 GND GND
22 GPIO6 31 32 GPIO12 26
23 GPIO13 33 34 GND GND
24 GPIO19 35 36 GPIO16 27
25 GPIO26 37 38 GPIO20 28
GND GND 39 40 GPIO21 29
After the wiringPi is initialized successfully, you can set the ledPin to output mode and then enter the while
loop, which is an endless loop (a while loop). That is, the program will always be executed in this cycle, unless
it is ended because of external factors. In this loop, use digitalWrite (ledPin, HIGH) to make ledPin output high
level, then LED turns ON. After a period of time delay, use digitalWrite(ledPin, LOW) to make ledPin output low
█ support@freenove.com
█ www.freenove.com support@freenove.com 49
level, then LED turns OFF, which is followed by a delay. Repeat the loop, then LED will start blinking.
pinMode(ledPin, OUTPUT);//Set the pin mode
printf("Using pin%d\n",%ledPin); //Output information on terminal
while(1){
digitalWrite(ledPin, HIGH); //Make GPIO output HIGH level
printf("led turned on >>>\n"); //Output information on terminal
delay(1000); //Wait for 1 second
digitalWrite(ledPin, LOW); //Make GPIO output LOW level
printf("led turned off <<<\n"); //Output information on terminal
delay(1000); //Wait for 1 second
}
support@freenove.com █
50 support@freenove.com www.freenove.com █
You can press “Ctrl+C” to end the program. The following is the program code:
1 import RPi.GPIO as GPIO
2 import time
3
4 ledPin = 11 # define ledPin
5
6 def setup():
7 GPIO.setmode(GPIO.BOARD) # use PHYSICAL GPIO Numbering
8 GPIO.setup(ledPin, GPIO.OUT) # set the ledPin to OUTPUT mode
9 GPIO.output(ledPin, GPIO.LOW) # make ledPin output LOW level
10 print ('using pin%d'%ledPin)
11
12 def loop():
13 while True:
14 GPIO.output(ledPin, GPIO.HIGH) # make ledPin output HIGH level to turn on led
15 print ('led turned on >>>') # print information on terminal
16 time.sleep(1) # Wait for 1 second
17 GPIO.output(ledPin, GPIO.LOW) # make ledPin output LOW level to turn off led
18 print ('led turned off <<<')
19 time.sleep(1) # Wait for 1 second
20
21 def destroy():
22 GPIO.cleanup() # Release all GPIO
23
24 if __name__ == '__main__': # Program entrance
█ support@freenove.com
█ www.freenove.com support@freenove.com 51
About RPi.GPIO:
RPi.GPIO
This is a Python module to control the GPIO on a Raspberry Pi. It includes basic output function and input
function of GPIO, and functions used to generate PWM.
GPIO.setmode(mode)
Sets the mode for pin serial number of GPIO.
mode=GPIO.BOARD, which represents the GPIO pin serial number based on physical location of RPi.
mode=GPIO.BCM, which represents the pin serial number based on CPU of BCM chip.
GPIO.setup(pin,mode)
Sets pin to input mode or output mode, “pin” for the GPIO pin, “mode” for INPUT or OUTPUT.
GPIO.output(pin,mode)
Sets pin to output mode, “pin” for the GPIO pin, “mode” for HIGH (high level) or LOW (low level).
For more functions related to RPi.GPIO, please refer to:
https://sourceforge.net/p/raspberry-gpio-python/wiki/Examples/
“import time” time is a module of python.
https://docs.python.org/2/library/time.html?highlight=time%20time#module-time
In subfunction setup(), GPIO.setmode (GPIO.BOARD) is used to set the serial number for GPIO based on
physical location of the pin. GPIO17 uses pin 11 of the board, so define ledPin as 11 and set ledPin to output
mode (output low level).
ledPin = 11 # define ledPin
def setup():
GPIO.setmode(GPIO.BOARD) # use PHYSICAL GPIO Numbering
GPIO.setup(ledPin, GPIO.OUT) # set the ledPin to OUTPUT mode
GPIO.output(ledPin, GPIO.LOW) # make ledPin output LOW level
print ('using pin%d'%ledPin)
support@freenove.com █
52 support@freenove.com www.freenove.com █
In loop(), there is a while loop, which is an endless loop (a while loop). That is, the program will always be
executed in this loop, unless it is ended because of external factors. In this loop, set ledPin output high level,
then the LED turns ON. After a period of time delay, set ledPin output low level, then the LED turns OFF, which
is followed by a delay. Repeat the loop, then LED will start blinking.
def loop():
while True:
GPIO.output(ledPin, GPIO.HIGH) # make ledPin output HIGH level to turn on led
print ('led turned on >>>') # print information on terminal
time.sleep(1) # Wait for 1 second
GPIO.output(ledPin, GPIO.LOW) # make ledPin output LOW level to turn off led
print ('led turned off <<<')
time.sleep(1) # Wait for 1 second
Finally, when the program is terminated, subfunction (a function within the file) will be executed, the LED will
be turned off and then the IO port will be released. If you close the program Terminal directly, the program
will also be terminated but the finish() function will not be executed. Therefore, the GPIO resources will not
be released which may cause a warning message to appear the next time you use GPIO. Therefore, do not
get into the habit of closing Terminal directly.
def finish():
GPIO.cleanup() # Release all GPIO
█ support@freenove.com
█ www.freenove.com support@freenove.com 53
If you want to use other editor to edit and execute the code, you can learn them in this section.
nano
Use the nano editor to open the file "Hello.c", then press " Ctrl+X " to exit.
nano Hello.c
As is shown below:
Use the following command to compile the code to generate the executable file “Hello”.
gcc Hello.c -o Hello
Use the following command to run the executable file “Hello”.
sudo ./Hello
After the execution, "Hello, World!" is printed out in terminal.
support@freenove.com █
54 support@freenove.com www.freenove.com █
geany
Next, learn to use the Geany editor. Use the following command to open the Geany in the sample file
"Hello.c" file directory path.
geany Hello.c
Or find and open Geany directly in the desktop main menu, and then click FileOpen to open the
"Hello.c", Or drag "Hello.c" to Geany directly.
If you want to create a new code, click FileNewFileSave as (name.c or name.py). Then write the code.
█ support@freenove.com
█ www.freenove.com support@freenove.com 55
Generate an executable file by clicking menu bar Build->Build, then execute the generated file by clicking
menu bar Build->Execute.
After the execution, a new terminal window will output the characters “Hello, World!”, as shown below:
support@freenove.com █
56 support@freenove.com www.freenove.com █
You can click Build->Set Build Commands to set compiler commands. In later projects, we will use various
compiler command options. If you choose to use Geany, you will need change the compiler command here.
As is shown below:
Here we have identified three code editors: vi, nano and Geany. There are also many other good code editors
available to you, and you can choose whichever you prefer to use.
In later projects, we will only use terminal to execute the project code. This way will not modify the code by
mistake.
█ support@freenove.com
█ www.freenove.com support@freenove.com 57
We also have car and robot kits for Raspberry Pi. You can visit our website for details.
https://www.amazon.com/freenove
https://www.youtube.com/watch?v=4Zv0GZUQjZc
FNK0050 Freenove Robot Dog Kit for Raspberry Pi
https://www.youtube.com/watch?v=7BmIZ8_R9d4
FNK0052 Freenove_Big_Hexapod_Robot_Kit_for_Raspberry_Pi
https://youtu.be/LvghnJ2DNZ0
support@freenove.com █
58 support@freenove.com www.freenove.com █
Control:
RPI, Arduino,
MCU and etc.
Input: Output:
buttons, switches, LED, buzzer,
sensors and etc. motor and etc.
Next, we will build a simple control system to control an LED through a push button switch.
In the project, we will control the LED state through a Push Button Switch. When the button is pressed, our
LED will turn ON, and when it is released, the LED will turn OFF. This describes a Momentary Switch.
Component List
Jumper Wire
█ support@freenove.com
█ www.freenove.com support@freenove.com 59
Component knowledge
When the button on the switch is pressed, the circuit is completed (your project is Powered ON).
Circuit
Schematic diagram
Hardware connection. If you need any support, please feel free to contact us via:support@freenove.com
support@freenove.com █
60 support@freenove.com www.freenove.com █
Code
This project is designed for learning how to use Push Button Switch to control an LED. We first need to read
the state of switch, and then determine whether to turn the LED ON in accordance to the state of the switch.
C Code 2.1.1 ButtonLED
First, observe the project result, then learn about the code in detail.
If you have any concerns, please contact us via: support@freenove.com
1. Use cd command to enter 02.1.1_ButtonLED directory of C code.
cd ~/Freenove_Kit/Code/C_Code/02.1.1_ButtonLED
2. Use the following command to compile the code “ButtonLED.c” and generate executable file “ButtonLED”
gcc ButtonLED.c -o ButtonLED -lwiringPi
3. Then run the generated file “ButtonLED”.
sudo ./ButtonLED
Later, the terminal window continues to print out the characters “led off…”. Press the button, then LED is
turned on and then terminal window prints out the "led on…". Release the button, then LED is turned off and
then terminal window prints out the "led off…". You can press "Ctrl+C" to terminate the program.
The following is the program code:
1 #include <wiringPi.h>
█ support@freenove.com
█ www.freenove.com support@freenove.com 61
2 #include <stdio.h>
3
4 #define ledPin 0 //define the ledPin
5 #define buttonPin 1 //define the buttonPin
6
7 void main(void)
8 {
9 printf("Program is starting ... \n");
10
11 wiringPiSetup(); //Initialize wiringPi.
12
13 pinMode(ledPin, OUTPUT); //Set ledPin to output
14 pinMode(buttonPin, INPUT);//Set buttonPin to input
15
16 pullUpDnControl(buttonPin, PUD_UP); //pull up to HIGH level
17 while(1){
18 if(digitalRead(buttonPin) == LOW){ //button is pressed
19 digitalWrite(ledPin, HIGH); //Make GPIO output HIGH level
20 printf("Button is pressed, led turned on >>>\n"); //Output information on
21 terminal
22 }
23 else { //button is released
24 digitalWrite(ledPin, LOW); //Make GPIO output LOW level
25 printf("Button is released, led turned off <<<\n"); //Output information on
26 terminal
27 }
28 }
29 }
In the circuit connection, LED and Button are connected with GPIO17 and GPIO18 respectively, which
correspond to 0 and 1 respectively in wiringPI. So define ledPin and buttonPin as 0 and 1 respectively.
#define ledPin 0 //define the ledPin
#define buttonPin 1 //define the buttonPin
In the while loop of main function, use digitalRead(buttonPin) to determine the state of Button. When the
button is pressed, the function returns low level, the result of “if” is true, and then turn on LED. Or, turn off
LED.
if(digitalRead(buttonPin) == LOW){ //button has pressed down
digitalWrite(ledPin, HIGH); //led on
printf("led on...\n");
}
else { //button has released
digitalWrite(ledPin, LOW); //led off
printf("...led off\n");
support@freenove.com █
62 support@freenove.com www.freenove.com █
Reference:
int digitalRead (int pin);
This function returns the value read at the given pin. It will be “HIGH” or “LOW”(1 or 0) depending on the
logic level at the pin.
█ support@freenove.com
█ www.freenove.com support@freenove.com 63
support@freenove.com █
64 support@freenove.com www.freenove.com █
In subfunction setup (), GPIO.setmode (GPIO.BOARD) is used to set the serial number of the GPIO, which is
based on physical location of the pin. Therefore, GPIO17 and GPIO18 correspond to pin11 and pin12
respectively in the circuit. Then set ledPin to output mode, buttonPin to input mode with a pull resistor.
ledPin = 11 # define ledPin
buttonPin = 12 # define buttonPin
def setup():
The loop continues endlessly to judge whether the key is pressed. When the button is pressed, the
GPIO.input(buttonPin) will return low level, then the result of “if” is true, ledPin outputs high level, LED is turned
on. Otherwise, LED will be turned off.
def loop():
while True:
if GPIO.input(buttonPin)==GPIO.LOW: # if button is pressed
GPIO.output(ledPin,GPIO.HIGH) # turn on led
print ('led turned on >>>') # print information on terminal
else : # if button is released
GPIO.output(ledPin,GPIO.LOW) # turn off led
print ('led turned off <<<')
Execute the function destroy (), close the program and release the occupied GPIO pins.
█ support@freenove.com
█ www.freenove.com support@freenove.com 65
We will also use a Push Button Switch, LED and RPi to make a MINI Table Lamp but this will function differently:
Press the button, the LED will turn ON, and pressing the button again, the LED turns OFF. The ON switch
action is no longer momentary (like a door bell) but remains ON without needing to continually press on the
Button Switch.
First, let us learn something about the push button switch.
When a Momentary Push Button Switch is pressed, it will not change from one state to another state
immediately. Due to tiny mechanical vibrations, there will be a short period of continuous buffeting before it
stabilizes in a new state too fast for Humans to detect but not for computer microcontrollers. The same is true
when the push button switch is released. This unwanted phenomenon is known as “bounce”.
press stable release stable
Ideal state
Virtual state
Therefore, if we can directly detect the state of the Push Button Switch, there are multiple pressing and
releasing actions in one pressing cycle. This buffeting will mislead the high-speed operation of the
microcontroller to cause many false decisions. Therefore, we need to eliminate the impact of buffeting. Our
solution: to judge the state of the button multiple times. Only when the button state is stable (consistent) over
a period of time, can it indicate that the button is actually in the ON state (being pressed).
This project needs the same components and circuits as we used in the previous section.
support@freenove.com █
66 support@freenove.com www.freenove.com █
Code
In this project, we still detect the state of Push Button Switch to control an LED. Here we need to define a
variable to define the state of LED. When the button switch is pressed once, the state of LED will be changed
once. This will allow the circuit to act as a virtual table lamp.
C Code 2.2.1 Tablelamp
First, observe the project result, and then learn about the code in detail.
If you have any concerns, please contact us via: support@freenove.com
1. Use cd command to enter 02.2.1_Tablelamp directory of C code.
cd ~/Freenove_Kit/Code/C_Code/02.2.1_Tablelamp
2. Use the following command to compile “Tablelamp.c” and generate executable file “Tablelamp”.
gcc Tablelamp.c -o Tablelamp -lwiringPi
3. Tablelamp: Then run the generated file “Tablelamp”.
sudo ./Tablelamp
When the program is executed, press the Button Switch once, the LED turns ON. Pressing the Button Switch
again turns the LED OFF.
1 #include <wiringPi.h>
2 #include <stdio.h>
3
4 #define ledPin 0 //define the ledPin
5 #define buttonPin 1 //define the buttonPin
6 int ledState=LOW; //store the State of led
7 int buttonState=HIGH; //store the State of button
8 int lastbuttonState=HIGH;//store the lastState of button
9 long lastChangeTime; //store the change time of button state
10 long captureTime=50; //set the stable time for button state
11 int reading;
12 int main(void)
13 {
14 printf("Program is starting...\n");
15
16 wiringPiSetup(); //Initialize wiringPi.
17
18 pinMode(ledPin, OUTPUT); //Set ledPin to output
19 pinMode(buttonPin, INPUT); //Set buttonPin to input
20
21 pullUpDnControl(buttonPin, PUD_UP); //pull up to high level
22 while(1){
23 reading = digitalRead(buttonPin); //read the current state of button
24 if( reading != lastbuttonState){ //if the button state has changed, record the time
25 point
26 lastChangeTime = millis();
27 }
█ support@freenove.com
█ www.freenove.com support@freenove.com 67
28 //if changing-state of the button last beyond the time we set, we consider that
29 //the current button state is an effective change rather than a buffeting
30 if(millis() - lastChangeTime > captureTime){
31 //if button state is changed, update the data.
32 if(reading != buttonState){
33 buttonState = reading;
34 //if the state is low, it means the action is pressing
35 if(buttonState == LOW){
36 printf("Button is pressed!\n");
37 ledState = !ledState; //Reverse the LED state
38 if(ledState){
39 printf("turn on LED ...\n");
40 }
41 else {
42 printf("turn off LED ...\n");
43 }
44 }
45 //if the state is high, it means the action is releasing
46 else {
47 printf("Button is released!\n");
48 }
49 }
50 }
51 digitalWrite(ledPin,ledState);
52 lastbuttonState = reading;
53 }
54
55 return 0;
56 }
This code focuses on eliminating the buffeting (bounce) of the button switch. We define several variables to
define the state of LED and button switch. Then read the button switch state constantly in while () to determine
whether the state has changed. If it has, then this time point is recorded.
reading = digitalRead(buttonPin); //read the current state of button
if( reading != lastbuttonState){
lastChangeTime = millis();
}
millis()
This returns a number representing the number of milliseconds since your program called one of the
wiringPiSetup functions. It returns to an unsigned 32-bit number value after 49 days because it
“wraps” around and restarts to value 0.
support@freenove.com █
68 support@freenove.com www.freenove.com █
Then according to the recorded time point, evaluate the duration of the button switch state change. If the
duration exceeds captureTime (buffeting time) we have set, it indicates that the state of the button switch has
changed. During that time, the while () is still detecting the state of the button switch, so if there is a change,
the time point of change will be updated. Then the duration will be evaluated again until the duration is
determined to be a stable state because it exceeds the time value we set.
if(millis() - lastChangeTime > captureTime){
//if button state is changed,update the data.
if(reading != buttonState){
buttonState = reading;
Finally, we need to judge the state of Button Switch. If it is low level, the changing state indicates that the
button Switch has been pressed, if the state is high level, then the button has been released. Here, we change
the status of the LED variable, and then update the state of the LED.
if(buttonState == LOW){
printf("Button is pressed!\n");
ledState = !ledState; //Reverse the LED state
if(ledState){
printf("turn on LED ...\n");
}
else {
printf("turn off LED ...\n");
}
}
//if the state is high, it means the action is releasing
else {
printf("Button is released!\n");
}
█ support@freenove.com
█ www.freenove.com support@freenove.com 69
support@freenove.com █
70 support@freenove.com www.freenove.com █
36 loop()
37 except KeyboardInterrupt: # Press ctrl-c to end the program.
38 destroy()
RPi.GPIO provides us with a simple but effective function to eliminate “jitter”, that is GPIO.add_event_detect().
It uses the callback function. Once it detects that the buttonPin has a specified action FALLING, it executes a
specified function buttonEvent(). In the function buttonEvent, each time the ledState is reversed, the state of
the LED will be updated.
def buttonEvent(channel): # When button is pressed, this function will be executed
global ledState
print ('buttonEvent GPIO%d' %channel)
ledState = not ledState
if ledState :
print ('Led turned on >>>')
else :
print ('Led turned off <<<')
GPIO.output(ledPin,ledState)
def loop():
#Button detect
GPIO.add_event_detect(buttonPin,GPIO.FALLING,callback = buttonEvent,bouncetime=300)
while True:
pass
Of course, you can also use the same programming idea in C code above to achieve this target.
█ support@freenove.com
█ www.freenove.com support@freenove.com 71
Component List
Jumper Wire x 1
Component knowledge
Let us learn about the basic features of these components to use and understand them better.
Bar Graph LED
A Bar Graph LED has 10 LEDs integrated into one compact component. The two rows of pins at its bottom
are paired to identify each LED like the single LED used earlier.
support@freenove.com █
72 support@freenove.com www.freenove.com █
Circuit
A reference system of labels is used in the circuit diagram below. Pins with the same network label are
connected together.
Schematic diagram
Hardware connection. If you need any support, please feel free to contact us via: support@freenove.com
If LEDbar doesn’t work, rotate LEDbar 180° to try. The label is random.
Code
This project is designed to make a flowing water lamp, which are these actions: First turn LED #1 ON, then
█ support@freenove.com
█ www.freenove.com support@freenove.com 73
turn it OFF. Then turn LED #2 ON, and then turn it OFF... and repeat the same to all 10 LEDs until the last LED
is turns OFF. This process is repeated to achieve the “movements” of flowing water.
C Code 3.1.1 LightWater
First, observe the project result, and then learn about the code in detail.
If you have any concerns, please contact us via: support@freenove.com
1. Use cd command to enter 03.1.1_LightWater directory of C code.
cd ~/Freenove_Kit/Code/C_Code/03.1.1_LightWater
2. Use the following command to compile “LightWater.c” and generate executable file “LightWater”.
gcc LightWater.c -o LightWater -lwiringPi
3. Then run the generated file “LightWater”.
sudo ./LightWater
After the program is executed, you will see that Bar Graph LED starts with the flowing water pattern flashing
from left to right and then back from right to left.
The following is the program code:
1 #include <wiringPi.h>
2 #include <stdio.h>
3
4 #define ledCounts 10
5 int pins[ledCounts] = {0,1,2,3,4,5,6,8,9,10};
6
7 void main(void)
8 {
9 int i;
10 printf("Program is starting ... \n");
11
12 wiringPiSetup(); //Initialize wiringPi.
13
14 for(i=0;i<ledCounts;i++){ //Set pinMode for all led pins to output
15 pinMode(pins[i], OUTPUT);
16 }
17 while(1){
18 for(i=0;i<ledCounts;i++){ // move led(on) from left to right
19 digitalWrite(pins[i],LOW);
20 delay(100);
21 digitalWrite(pins[i],HIGH);
22 }
23 for(i=ledCounts-1;i>-1;i--){ // move led(on) from right to left
24 digitalWrite(pins[i],LOW);
25 delay(100);
26 digitalWrite(pins[i],HIGH);
27 }
28 }
29 }
support@freenove.com █
74 support@freenove.com www.freenove.com █
In the program, configure the GPIO0-GPIO9 to output mode. Then, in the endless “while” loop of main
function, use two “for” loop to realize flowing water light from left to right and from right to left.
while(1){
for(i=0;i<ledCounts;i++){ // move led(on) from left to right
digitalWrite(pins[i],LOW);
delay(100);
digitalWrite(pins[i],HIGH);
}
for(i=ledCounts-1;i>-1;i--){ // move led(on) from right to left
digitalWrite(pins[i],LOW);
delay(100);
digitalWrite(pins[i],HIGH);
}
}
}
█ support@freenove.com
█ www.freenove.com support@freenove.com 75
support@freenove.com █
76 support@freenove.com www.freenove.com █
def loop():
while True:
for pin in ledPins: #make led on from left to right
GPIO.output(pin, GPIO.LOW)
time.sleep(0.1)
GPIO.output(pin, GPIO.HIGH)
for pin in ledPins[::-1]: #make led on from right to left
GPIO.output(pin, GPIO.LOW)
time.sleep(0.1)
GPIO.output(pin, GPIO.HIGH)
█ support@freenove.com
█ www.freenove.com support@freenove.com 77
We describe this project as a Breathing Light. This means that an LED that is OFF will then turn ON gradually
and then gradually turn OFF like "breathing". Okay, so how do we control the brightness of an LED to create
a Breathing Light? We will use PWM to achieve this goal.
Component List
Jumper Wire
Component Knowledge
support@freenove.com █
78 support@freenove.com www.freenove.com █
Note that the Analog signals are curved waves and the Digital signals are “Square Waves”.
In practical applications, we often use binary as the digital signal, that is a series of 0’s and 1’s. Since a binary
signal only has two values (0 or 1) it has great stability and reliability. Lastly, both analog and digital signals
can be converted into the other.
PWM
PWM, Pulse-Width Modulation, is a very effective method for using digital signals to control analog circuits.
Digital processors cannot directly output analog signals. PWM technology makes it very convenient to achieve
this conversion (translation of digital to analog signals).
PWM technology uses digital pins to send certain frequencies of square waves, that is, the output of high
levels and low levels, which alternately last for a while. The total time for each set of high levels and low levels
is generally fixed, which is called the period (Note: the reciprocal of the period is frequency). The time of high
level outputs are generally called “pulse width”, and the duty cycle is the percentage of the ratio of pulse
duration, or pulse width (PW) to the total period (T) of the waveform. The longer the output of high levels last,
the longer the duty cycle and the higher the corresponding voltage in the analog signal will be. The following
figures show how the analog signal voltages vary between 0V-5V (high level is 5V) corresponding to the pulse
width 0%-100%:
█ support@freenove.com
█ www.freenove.com support@freenove.com 79
The longer the PWM duty cycle is, the higher the output power will be. Now that we understand this
relationship, we can use PWM to control the brightness of an LED or the speed of DC motor and so on.
It is evident, from the above, that PWM is not actually analog but the effective value of voltage is equivalent
to the corresponding analog value. Therefore, by using PWM, we can control the output power of to an LED
and control other devices and modules to achieve multiple effects and actions.
In RPi, GPIO18 pin has the ability to output to hardware via PWM with a 10-bit accuracy. This means that 100%
10
of the pulse width can be divided into 2 =1024 equal parts.
The wiringPi library of C provides both a hardware PWM and a software PWM method, while the wiringPi
library of Python does not provide a hardware PWM method. There is only a software PWM option for Python.
The hardware PWM only needs to be configured, does not require CPU resources and is more precise in time
control. The software PWM requires the CPU to work continuously by using code to output high level and
low level. This part of the code is carried out by multi-threading, and the accuracy is relatively not high enough.
support@freenove.com █
80 support@freenove.com www.freenove.com █
Circuit
Code
This project uses the PWM output from the GPIO18 pin to make the pulse width gradually increase from 0%
to 100% and then gradually decrease from 100% to 0% to make the LED glow brighter then dimmer.
C Code 4.1.1 BreathingLED
First, observe the project result, and then learn about the code in detail.
If you have any concerns, please contact us via: support@freenove.com
1. Use cd command to enter 04.1.1_BreathingLED directory of C code.
cd ~/Freenove_Kit/Code/C_Code/04.1.1_BreathingLED
2. Use following command to compile “BreathingLED.c” and generate executable file “BreathingLED”.
gcc BreathingLED.c -o BreathingLED -lwiringPi
3. Then run the generated file “BreathingLED”
sudo ./BreathingLED
After the program is executed, you'll see that LED is turned from on to off and then from off to on gradually
like breathing.
The following is the program code:
1 #include <wiringPi.h>
2 #include <stdio.h>
3 #include <softPwm.h>
4 #define ledPin 1
5 void main(void)
6 {
█ support@freenove.com
█ www.freenove.com support@freenove.com 81
7 int i;
8
9 printf("Program is starting ... \n");
10
11 wiringPiSetup(); //Initialize wiringPi.
12
13 softPwmCreate(ledPin, 0, 100);//Creat SoftPWM pin
14
15 while(1){
16 for(i=0;i<100;i++){ //make the led brighter
17 softPwmWrite(ledPin, i);
18 delay(20);
19 }
20 delay(300);
21 for(i=100;i>=0;i--){ //make the led darker
22 softPwmWrite(ledPin, i);
23 delay(20);
24 }
25 delay(300);
26 }
27 }
First, create a software PWM pin.
softPwmCreate(ledPin, 0, 100);//Creat SoftPWM pin
There are two “for” loops in the next endless “while” loop. The first loop outputs a power signal to the ledPin
PWM from 0% to 100% and the second loop outputs a power signal to the ledPin PWM from 100% to 0%.
while(1){
for(i=0;i<100;i++){
softPwmWrite(ledPin, i);
delay(20);
}
delay(300);
for(i=100;i>=0;i--){
softPwmWrite(ledPin, i);
delay(20);
}
delay(300);
}
You can also adjust the rate of the state change of LED by changing the parameter of the delay() function in
the “for” loop.
int softPwmCreate (int pin, int initialValue, int pwmRange) ;
This creates a software controlled PWM pin.
void softPwmWrite (int pin, int value) ;
This updates the PWM value on the given pin.
For more details, please refer http://wiringpi.com/reference/software-pwm-library/
support@freenove.com █
82 support@freenove.com www.freenove.com █
█ support@freenove.com
█ www.freenove.com support@freenove.com 83
support@freenove.com █
84 support@freenove.com www.freenove.com █
The LED is connected to the IO port called GPIO18. The LedPin is defined as pin 12 and set to output mode
according to the corresponding chart for pin designations. Then create a PWM instance and set the PWM
frequency to 1000HZ and the initial duty cycle to 0%.
LedPin = 12 # define the LedPin
def setup():
global p
GPIO.setmode(GPIO.BOARD) # use PHYSICAL GPIO Numbering
GPIO.setup(LedPin, GPIO.OUT) # set LedPin to OUTPUT mode
GPIO.output(LedPin, GPIO.LOW) # make ledPin output LOW level to turn off LED
There are two “for” loops used to control the breathing LED in the next endless “while” loop. The first loop
outputs a power signal to the ledPin PWM from 0% to 100% and the second loop outputs a power signal to
the ledPin PWM from 100% to 0%.
def loop():
while True:
for dc in range(0, 101, 1): # make the led brighter
p.ChangeDutyCycle(dc) # set dc value as the duty cycle
time.sleep(0.01)
time.sleep(1)
for dc in range(100, -1, -1): # make the led darker
p.ChangeDutyCycle(dc) # set dc value as the duty cycle
time.sleep(0.01)
time.sleep(1)
The related functions of PWM are described as follows:
p = GPIO.PWM(channel, frequency)
To create a PWM instance:
p.start(dc)
To start PWM, where dc is the duty cycle (0.0 <= dc <= 100.0)
p.ChangeFrequency(freq)
To change the frequency, where freq is the new frequency in Hz
p.ChangeDutyCycle(dc)
To change the duty cyclewhere 0.0 <= dc <= 100.0
p.stop()
To stop PWM.
For more details regarding methods for using PWM with RPi.GPIO, please refer to:
https://sourceforge.net/p/raspberry-gpio-python/wiki/PWM/
█ support@freenove.com
█ www.freenove.com support@freenove.com 85
Red, Green, and Blue light are called 3 Primary Colors when discussing light (Note: for pigments such as paints,
the 3 Primary Colors are Red, Blue and Yellow). When you combine these three Primary Colors of light with
varied brightness, they can produce almost any color of visible light. Computer screens, single pixels of cell
phone screens, neon lamps, etc. can all produce millions of colors due to phenomenon.
RGB
8 8 8
If we use a three 8 bit PWM to control the RGB LED, in theory, we can create 2 *2 *2 =16777216 (16 million)
colors through different combinations of RGB light brightness.
Next, we will use RGB LED to make a multicolored LED.
support@freenove.com █
86 support@freenove.com www.freenove.com █
Component List
Jumper Wire
Circuit
Schematic diagram
Hardware connection. If you need any support, please feel free to contact us via: support@freenove.com
Video: https://youtu.be/tbnX2AsX2y4
In this kit, the RGB led is Common anode. The voltage difference between LED will make it work. There is
█ support@freenove.com
█ www.freenove.com support@freenove.com 87
no visible GND. The GPIO ports can also receive current while in output mode.
If circuit above doesn’t work, the RGB LED may be common cathode. Please try following wiring.
There is no need to modify code for random color.
Code
We need to use the software to make the ordinary GPIO output PWM, since this project requires 3 PWM and
in RPi only one GPIO has the hardware capability to output PWM,
C Code 5.1.1 Colorful LED
First, observe the project result, and then learn about the code in detail.
If you have any concerns, please contact us via: support@freenove.com
1. Use cd command to enter 05.1.1_ColorfulLED directory of C code.
cd ~/Freenove_Kit/Code/C_Code/05.1.1_ColorfulLED
2. Use following command to compile “ColorfulLED.c” and generate executable file “ColorfulLED”.
Note: in this project, the software PWM uses a multi-threading mechanism. So “-lpthread” option need
to be add to the compiler.
gcc ColorfulLED.c -o ColorfulLED -lwiringPi -lpthread
3. And then run the generated file “ColorfulLED”.
sudo ./ColorfulLED
After the program is executed, you will see that the RGB LED shows lights of different colors randomly.
support@freenove.com █
88 support@freenove.com www.freenove.com █
First, in subfunction of ledInit(), create the software PWM control pins used to control the R, G, B pin
respectively.
void setupLedPin(void)
{
softPwmCreate(ledPinRed, 0, 100); //Creat SoftPWM pin for red
softPwmCreate(ledPinGreen,0, 100); //Creat SoftPWM pin for green
softPwmCreate(ledPinBlue, 0, 100); //Creat SoftPWM pin for blue
}
Then create subfunction, and set the PWM of three pins.
void setLedColor(int r, int g, int b)
█ support@freenove.com
█ www.freenove.com support@freenove.com 89
{
softPwmWrite(ledPinRed, r); //Set the duty cycle
softPwmWrite(ledPinGreen, g); //Set the duty cycle
softPwmWrite(ledPinBlue, b); //Set the duty cycle
}
Finally, in the “while” loop of main function, get three random numbers and specify them as the PWM duty
cycle, which will be assigned to the corresponding pins. So RGB LED can switch the color randomly all the
time.
while(1){
r=random()%100; //get a random in (0,100)
g=random()%100; //get a random in (0,100)
b=random()%100; //get a random in (0,100)
setLedColor(r,g,b);//set random as the duty cycle value
printf("r=%d, g=%d, b=%d \n",r,g,b);
delay(1000);
}
The related function of PWM Software can be described as follows:
long random();
This function will return a random number.
For more details about Software PWM, please refer to: http://wiringpi.com/reference/software-pwm-library/
support@freenove.com █
90 support@freenove.com www.freenove.com █
█ support@freenove.com
█ www.freenove.com support@freenove.com 91
36 pwmRed.stop()
37 pwmGreen.stop()
38 pwmBlue.stop()
39 GPIO.cleanup()
40
41 if __name__ == '__main__': # Program entrance
42 print ('Program is starting ... ')
43 setup()
44 try:
45 loop()
except KeyboardInterrupt: # Press ctrl-c to end the program.
destroy()
In last chapter, we learned how to use Python language to make a pin output PWM. In this project, we output
to three pins via PWM and the method is exactly the same as we used in the last chapter. In the “while” loop
of “loop” function, we first generate three random numbers, and then specify these three random numbers
as the PWM values for the three pins, which will make the RGB LED produce multiple colors randomly.
def loop():
while True :
r=random.randint(0,100) #get a random in (0,100)
g=random.randint(0,100)
b=random.randint(0,100)
setColor(r,g,b) #set random as a duty cycle value
print ('r=%d, g=%d, b=%d ' %(r ,g, b))
time.sleep(1)
support@freenove.com █
92 support@freenove.com www.freenove.com █
Chapter 6 Buzzer
In this chapter, we will learn about buzzers and the sounds they make. And in our next project, we will use an
active buzzer to make a doorbell and a passive buzzer to make an alarm.
We will make a doorbell with this functionality: when the Push Button Switch is pressed the buzzer sounds
and when the button is released, the buzzer stops. This is a momentary switch function.
Component List
█ support@freenove.com
█ www.freenove.com support@freenove.com 93
Component knowledge
Buzzer
A buzzer is an audio component. They are widely used in electronic devices such as calculators, electronic
alarm clocks, automobile fault indicators, etc. There are both active and passive types of buzzers. Active
buzzers have oscillator inside, these will sound as long as power is supplied. Passive buzzers require an
external oscillator signal (generally using PWM with different frequencies) to make a sound.
Active buzzers are easier to use. Generally, they only make a specific sound frequency. Passive buzzers
require an external circuit to make sounds, but passive buzzers can be controlled to make sounds of various
frequencies. The resonant frequency of the passive buzzer in this Kit is 2kHz, which means the passive
buzzer is the loudest when its resonant frequency is 2kHz.
Transistors
A transistor is required in this project due to the buzzer’s current being so great that GPIO of RPi’s output
capability cannot meet the power requirement necessary for operation. A NPN transistor is needed here to
support@freenove.com █
94 support@freenove.com www.freenove.com █
In our kit, the PNP transistor is marked with 8550, and the NPN transistor is marked with 8050.
Thanks to the transistor's characteristics, they are often used as switches in digital circuits. As micro-controllers
output current capacity is very weak, we will use a transistor to amplify its current in order to drive components
requiring higher current.
When we use a NPN transistor to drive a buzzer, we often use the following method. If GPIO outputs high
level, current will flow through R1 (Resistor 1), the transistor conducts current and the buzzer will make sounds.
If GPIO outputs low level, no current will flow through R1, the transistor will not conduct currentand buzzer
will remain silent (no sounds).
When we use a PNP transistor to drive a buzzer, we often use the following method. If GPIO outputs low level,
current will flow through R1. The transistor conducts current and the buzzer will make sounds. If GPIO outputs
high level, no current flows through R1, the transistor will not conduct current and buzzer will remain silent
(no sounds). Below are the circuit schematics for both a NPN and PNP transistor to power a buzzer.
█ support@freenove.com
█ www.freenove.com support@freenove.com 95
support@freenove.com █
96 support@freenove.com www.freenove.com █
Circuit
Hardware connection. If you need any support, please feel free to contact us via: support@freenove.com
Video: https://youtu.be/R_dmi3YwY-U
Note: in this circuit, the power supply for the buzzer is 5V, and pull-up resistor of the push button switch is
connected to the 3.3V power feed. Actually, the buzzer can work when connected to the 3.3V power feed
but this will produce a weak sound from the buzzer (not very loud).
Code
In this project, a buzzer will be controlled by a push button switch. When the button switch is pressed, the
buzzer sounds and when the button is released, the buzzer stops. It is analogous to our earlier project that
controlled an LED ON and OFF.
█ support@freenove.com
█ www.freenove.com support@freenove.com 97
After the program is executed, press the push button switch and the will buzzer sound. Release the push
button switch and the buzzer will stop.
The following is the program code:
1 #include <wiringPi.h>
2 #include <stdio.h>
3
4 #define buzzerPin 0 //define the buzzerPin
5 #define buttonPin 1 //define the buttonPin
6
7 void main(void)
8 {
9 printf("Program is starting ... \n");
10
11 wiringPiSetup();
12
13 pinMode(buzzerPin, OUTPUT);
14 pinMode(buttonPin, INPUT);
15
16 pullUpDnControl(buttonPin, PUD_UP); //pull up to HIGH level
17 while(1){
18
19 if(digitalRead(buttonPin) == LOW){ //button is pressed
20 digitalWrite(buzzerPin, HIGH); //Turn on buzzer
21 printf("buzzer turned on >>> \n");
22 }
23 else { //button is released
24 digitalWrite(buzzerPin, LOW); //Turn off buzzer
25 printf("buzzer turned off <<< \n");
26 }
27 }
28 }
The code is exactly the same as when we used a push button switch to control an LED. You can also try using
the PNP transistor to achieve the same results.
support@freenove.com █
98 support@freenove.com www.freenove.com █
After the program is executed, press the push button switch and the buzzer will sound. Release the push
button switch and the buzzer will stop.
█ support@freenove.com
█ www.freenove.com support@freenove.com 99
Code
In this project, our buzzer alarm is controlled by the push button switch. Press the push button switch and the
buzzer will sound. Release the push button switch and the buzzer will stop.
As stated before, it is analogous to our earlier project that controlled an LED ON and OFF.
To control a passive buzzer requires PWM of certain sound frequency.
C Code 6.2.1 Alertor
First, observe the project result, and then learn about the code in detail.
If you have any concerns, please contact us via: support@freenove.com
1. Use cd command to enter 06.2.1_Alertor directory of C code.
cd ~/Freenove_Kit/Code/C_Code/06.2.1_Alertor
2. Use following command to compile “Alertor.c” and generate executable file “Alertor”. “-lm” and “-lpthread”
compiler options need to added here.
gcc Alertor.c -o Alertor -lwiringPi -lm -lpthread
3. Then run the generated file “Alertor”.
sudo ./Alertor
After the program is executed, press the push button switch and the buzzer will sound. Release the push
button switch and the buzzer will stop.
The following is the program code:
1 #include <wiringPi.h>
2 #include <stdio.h>
3 #include <softTone.h>
4 #include <math.h>
5
6 #define buzzerPin 0 //define the buzzerPin
7 #define buttonPin 1 //define the buttonPin
8
9 void alertor(int pin){
10 int x;
11 double sinVal, toneVal;
12 for(x=0;x<360;x++){ // frequency of the alertor is consistent with the sine wave
13 sinVal = sin(x * (M_PI / 180)); //Calculate the sine value
14 toneVal = 2000 + sinVal * 500; //Add the resonant frequency and weighted sine
15 value
16 softToneWrite(pin,toneVal); //output corresponding PWM
support@freenove.com █
100 support@freenove.com www.freenove.com █
17 delay(1);
18 }
19 }
20 void stopAlertor(int pin){
21 softToneWrite(pin,0);
22 }
23 int main(void)
24 {
25 printf("Program is starting ... \n");
26
27 wiringPiSetup();
28
29 pinMode(buzzerPin, OUTPUT);
30 pinMode(buttonPin, INPUT);
31 softToneCreate(buzzerPin); //set buzzerPin
32 pullUpDnControl(buttonPin, PUD_UP); //pull up to HIGH level
33 while(1){
34 if(digitalRead(buttonPin) == LOW){ //button is pressed
35 alertor(buzzerPin); // turn on buzzer
36 printf("alertor turned on >>> \n");
37 }
38 else { //button is released
39 stopAlertor(buzzerPin); // turn off buzzer
40 printf("alertor turned off <<< \n");
41 }
42 }
43 return 0;
44 }
The code is the same to the active buzzer but the method is different. A passive buzzer requires PWM of a
certain frequency, so you need to create a software PWM pin though softToneCreate (buzzeRPin). Here
softTone is designed to generate square waves with variable frequency and a duty cycle fixed to 50%, which
is a better choice for controlling the buzzer.
softToneCreate(buzzeRPin);
In the while loop of the main function, when the push button switch is pressed the subfunction alertor() will
be called and the alarm will issue a warning sound. The frequency curve of the alarm is based on a sine curve.
We need to calculate the sine value from 0 to 360 degrees and multiplied by a certain value (here this value
is 500) plus the resonant frequency of buzzer. We can set the PWM frequency through softToneWrite (pin,
toneVal).
void alertor(int pin){
int x;
double sinVal, toneVal;
for(x=0;x<360;x++){ //The frequency is based on the sine curve.
sinVal = sin(x * (M_PI / 180));
█ support@freenove.com
█ www.freenove.com support@freenove.com 101
If you want to stop the buzzer, just set PWM frequency of the buzzer pin to 0.
void stopAlertor(int pin){
softToneWrite(pin,0);
}
support@freenove.com █
102 support@freenove.com www.freenove.com █
After the program is executed, press the push button switch and the buzzer will sound. Release the push
button switch and the buzzer will stop.
The following is the program code:
1 import RPi.GPIO as GPIO
2 import time
3 import math
4
5 buzzerPin = 11 # define the buzzerPin
6 buttonPin = 12 # define the buttonPin
7
8 def setup():
9 global p
10 GPIO.setmode(GPIO.BOARD) # Use PHYSICAL GPIO Numbering
11 GPIO.setup(buzzerPin, GPIO.OUT) # set RGBLED pins to OUTPUT mode
12 GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_UP) # Set buttonPin to INPUT
13 mode, and pull up to HIGH level, 3.3V
14 p = GPIO.PWM(buzzerPin, 1)
15 p.start(0);
16
17 def loop():
18 while True:
19 if GPIO.input(buttonPin)==GPIO.LOW:
20 alertor()
21 print ('alertor turned on >>> ')
22 else :
23 stopAlertor()
24 print ('alertor turned off <<<')
25 def alertor():
26 p.start(50)
27 for x in range(0,361): # Make frequency of the alertor consistent with the sine wave
28 sinVal = math.sin(x * (math.pi / 180.0)) # calculate the sine value
29 toneVal = 2000 + sinVal * 500 # Add to the resonant frequency with a Weighted
30 p.ChangeFrequency(toneVal) # Change Frequency of PWM to toneVal
31 time.sleep(0.001)
32
33 def stopAlertor():
█ support@freenove.com
█ www.freenove.com support@freenove.com 103
34 p.stop()
35
36 def destroy():
37 GPIO.output(buzzerPin, GPIO.LOW) # Turn off buzzer
38 GPIO.cleanup() # Release GPIO resource
39
40 if __name__ == '__main__': # Program entrance
41 print ('Program is starting...')
42 setup()
43 try:
44 loop()
45 except KeyboardInterrupt: # Press ctrl-c to end the program.
46 destroy()
The code is the same to the active buzzer but the method is different. A passive buzzer requires PWM of a
certain frequency, so you need to create a software PWM pin through softToneCreate (buzzeRPin). The way
to create a PWM was introduced earlier in the BreathingLED and RGB LED projects.
def setup():
global p
GPIO.setmode(GPIO.BOARD) # Use PHYSICAL GPIO Numbering
GPIO.setup(buzzerPin, GPIO.OUT) # set RGBLED pins to OUTPUT mode
GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_UP) # Set buttonPin to INPUT
mode, and pull up to HIGH level, 3.3V
p = GPIO.PWM(buzzerPin, 1)
p.start(0);
In the while loop loop of the main function, when the push button switch is pressed the subfunction alertor()
will be called and the alarm will issue a warning sound. The frequency curve of the alarm is based on a sine
curve. We need to calculate the sine value from 0 to 360 degrees and multiplied by a certain value (here this
value is 500) plus the resonant frequency of buzzer. We can set the PWM frequency through softToneWrite
(pin, toneVal).
def alertor():
p.start(50)
for x in range(0,361):
sinVal = math.sin(x * (math.pi / 180.0))
toneVal = 2000 + sinVal * 500
p.ChangeFrequency(toneVal)
time.sleep(0.001)
When the push button switch is released, the buzzer (in this case our Alarm) will stop.
def stopAlertor():
p.stop()
support@freenove.com █
104 support@freenove.com www.freenove.com █
In this project, we need to build a WebIOPi service, and then use the RPi GPIO to control an LED through the
web browser of phone or PC.
Component List
Jumper M/M x2
█ support@freenove.com
█ www.freenove.com support@freenove.com 105
Circuit
Schematic diagram
Hardware connection. If you need any support, please feel free to contact us via: support@freenove.com
support@freenove.com █
106 support@freenove.com www.freenove.com █
Here is a solution fromblog E-Tinkers, author Henry Cheung. For more details, please refer to link below:
https://www.e-tinkers.com/2018/04/how-to-control-raspberry-pi-gpio-via-http-web-server/
1, Make sure you have set python3 as default python. Then run following command in terminal to install
http.server in your Raspberry Pi.
sudo apt-get install http.server
2, Open WebIO.py
cd ~/Freenove_Kit/Code/Python_Code/7.1.1_WebIO
geany WebIO.py
3, Visit http://192.168.1.112:8000/ in web brower on compter under local area networks. Change IP to your
Raspberry Pi IP address.
█ support@freenove.com
█ www.freenove.com support@freenove.com 107
Note: If you have a Raspberry Pi 4B, you may have some trouble. The reason for changing the file in the
configuration process is that the newer generation models of the RPi CPUs are different form the older
ones and you may not be able to access the GPIO Header at the end of this tutorial. A solution to this is
given in an online tutorial by from E-Tinkers blogger Henry Cheung. For more details, please refer to previouse
section.
The following is the key part of this chapter. The installation steps refer to WebIOPi official. And you also can
directly refer to the official installation steps. The latest version (in 2016-6-27) of WebIOPi is 0.7.1. So, you
may encounter some issues in using it. We will explain these issues and provide the solution in the following
installation steps.
Here are the steps to build a WebIOPi:
Installation
1. Get the installation package. You can use the following command to obtain.
wget https://github.com/Freenove/WebIOPi/archive/master.zip -O WebIOPi.zip
2. Extract the package and generate a folder named "WebIOPi-master". Then enter the folder.
unzip WebIOPi.zip
cd WebIOPi-master/WebIOPi-0.7.1
3. Patch for Raspberry Pi B+, 2B, 3B, 3B+.
patch -p1 -i webiopi-pi2bplus.patch
4. Run setup.sh to start the installation, the process takes a while and you will need to be patient.
sudo ./setup.sh
5. If setup.sh does not have permission to execute, execute the following command
sudo sh ./setup.sh
Run
After the installation is completed, you can use the webiopi command to start running.
$ sudo webiopi [-h] [-c config] [-l log] [-s script] [-d] [port]
Options:
-h, --help Display this help
-c, --config file Load config from file
-l, --log file Log to file
-s, --script file Load script from file
-d, --debug Enable DEBUG
Arguments:
port Port to bind the HTTP Server
Run webiopi with verbose output and the default config file:
sudo webiopi -d -c /etc/webiopi/config
The Port is 8000 in default. Now WebIOPi has been launched. Keep it running.
support@freenove.com █
108 support@freenove.com www.freenove.com █
Control methods:
Click/Tap the OUT/IN button to change GPIO direction.
Click/Tap pins to change the GPIO output state.
█ support@freenove.com
█ www.freenove.com support@freenove.com 109
Completed
According to the circuit we build, set GPIO17 to OUT, then click Header11 to control the LED.
You can end the webioPi in the terminal by “Ctr+C”.
What's Next?
THANK YOU for participating in this learning experience! If you have completed all of the projects successfully
you can consider yourself a Raspberry Pi Master.
We have reached the end of this Tutorial. If you find errors, omissions or you have suggestions and/or
questions about the Tutorial or component contents of this Kit, please feel free to contact us:
support@freenove.com
We will make every effort to make changes and correct errors as soon as feasibly possible and publish a
revised version.
If you are interesting in processing, you can study the Processing.pdf in the unzipped folder.
If you want to learn more about Arduino, Raspberry Pi, Smart Cars, Robotics and other interesting products
in science and technology, please continue to visit our website. We will continue to launch fun, cost-effective,
innovative and exciting products.
http://www.freenove.com/
support@freenove.com █