End Presentation


TWiki Slide Show
Next
Sensors for IoT devices … or A virtual world reflecting the real world

A 2 day tutorial with hands-on exercises

held during AFNOG 2018 in Dakar, Sénégal

Uli Raich (uli.raich@gmail.com)

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 1 of 46





















TWiki Slide Show
Next
The Internet
When the Internet was invented it was used for communications between humans

Typical applications where:

  • Email
  • Remote login
  • File transfers

With cheaper and more powerful micro-controllers devices can communicate with each other

or with centralized servers over the network and they can observe their environment

with dedicated sensors.

This is what we call the Internet of Things (IoT)

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 2 of 46





















TWiki Slide Show
Next
Microprocessors
When I started to work on microprocessors in the early 1980’s these were very simple devices

containing just a single CPU and address and data lines + a few control lines to interface

to external memory and I/O interfaces, typically : a serial and a parallel port.

m6800.png

The price for the chip was 176 US $.

The development board was sold for 300 US $.

You got 256 bytes of RAM, 2kBytes of EPROM and the serial and parallel port.

Programming was done in assembly language or even straight machine code.

No Internet!

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 3 of 46





















TWiki Slide Show
Next
An IoT device today
This year I bought this micro-controller:

esp32price.png

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 4 of 46





















TWiki Slide Show
Next
The specs
esp32.png

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 5 of 46





















TWiki Slide Show
Next
The Raspberry Pi
… and this is what we are going to use:

RASPBERRY-PI-3_sml.jpg

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 6 of 46





















TWiki Slide Show
Next
Official source of information
The Raspberry Pi has been sold at more than 8 million pieces!

The user community is huge and is now increased by another 15 users!

An enormous wealth of information on all sorts of subjects using the Raspberry Pi

can be found on the WEB.

The official site is

https://www.raspberrypi.org

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 7 of 46





















TWiki Slide Show
Next
The TWiki server
All information about this tutorial is available on a TWiki server.

TWiki uses the same documentation format as Wikipedia.

This makes it very simple for the lecturer to provide on-line documentation,

which can be extended by students.

This is our Twiki server:

https://afnog.iotworkshop.africa/do/view

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 8 of 46





















TWiki Slide Show
Next
The TWiki server (2)
twiki.png

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 9 of 46





















TWiki Slide Show
Next
Specs and price
The price (35 US $) of this board is a bit higher but still much less than the m6800 development board.

And this is what you get:


broadcom.png

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 10 of 46





















TWiki Slide Show
Next
Interfaces and software
In addition to the GPIO (General Purpose I/O) you get

  • a serial interface
  • I2C
  • SPI
very useful to connect external sensors, ADCs or DACs

On the micro SD card (or a memory stick on one of the USB slots) you can install

a full-blown Linux operating system

(for the Windows gurus: there is also a Windows version)

All you need to have a stand alone computer is

  • an HDMI screen
  • a USB keyboard and mouse

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 11 of 46





















TWiki Slide Show
Next
Programming
Since we have a full Linux system programming can be done

  • in C or C++
  • Python
  • or any language that Linux supports … and there are many!

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 12 of 46





















TWiki Slide Show
Next
Accessing the RPI remotely
Of course we can use the interfaces on the Raspberry Pi to connect a screen,

keyboard and mouse and use it in stand-alone mode

but we can also make use of the PC resources and access it remotely

There are several ways to access the RPI remotely:

Using the VNC server on the Pi you can access it with a remote desktop from the PC

The secure shell (ssh) allows you to get a remote terminal in the Pi

With scp you can copy files back and forth between the Pi and the PC

With nfs you can mount part of the Pi file system into the PC file system tree

and access the PI SD card as if it was a local PC disk.

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 13 of 46





















TWiki Slide Show
Next
The remote Desktop
On the remote desktop the screen is replaced by the computer screen of the device

connected to the RPI and the keyboard by this computer's keyboard. The connected computer

acts like a graphics terminal for the RPI.

You see on the computer exactly what you would see on a directly connected screen.

remoteDesktop.png

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 14 of 46





















TWiki Slide Show
Next
ssh
In the case of ssh you have a single terminal window that is connected to a shell on the Pi.

The command is:

ssh userOnPi@piIPaddress

Where piIPaddress can be the Pi’s IP address or host name.

If you specify the -X option you can run X-11 based programs where

the X protocol is run over the ssh connection.

For Windows computers you need PuTTY in conjunction with

an X server (e.g. Xming) to connect to the RPi

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 15 of 46





















TWiki Slide Show
Next
ssh(2)
Here you see a screen dump from the PC with a remote terminal that

started an emacs session on the Pi

ssh.png

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 16 of 46





















TWiki Slide Show
Next
The Cobbler
As we have seen, the Raspberry Pi has a 40 pin connector onto which many interface signals are connected.

We use a flat cable and a “cobbler” to bring these signals onto a bread board

where we can build our own electronic circuits for acquisition or control by the Rpi.

Libraries in C/C++, Java and Python are available easing software access to these signals.

cobbler.png

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 17 of 46





















TWiki Slide Show
Next
Programming the RPi
As already mentioned, the Raspberry Pi can be programmed in

a large number of programming languages.

One of the most fashionable languages is Python.

Python is an interpreted language and code can be entered into a Python interpreter

which executes it immediately. Like this, Python can e.g. be used as a calculator.

It is however also possible to write whole programs (scripts) which the interpreter executes

Want to learn Python? Try the Python tutorial!

We will attempt to learn the language in 2 h!

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 18 of 46





















TWiki Slide Show
Next
Running the Interpreter
pythonInterpreter.png


The quit() function exits the interpreter

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 19 of 46





















TWiki Slide Show
Next
idle
Instead of running a standard editor like vi or emacs you may want to run

an Integrated Development Environment (IDE) created specifically for Python instead.

Try idle

idle.png

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 20 of 46





















TWiki Slide Show
Next
The same thing as a script in idle
Here you see the 2 idle windows.

The top one contains the editor, the second the Python shell

pythonScript.png

pythonShell.png

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 21 of 46





















TWiki Slide Show
Next
Running the Program
The script can berun from the Linux command shell with:

python scriptName

or we can make it executable and run it like we would run

any compiled C program or any bash script:

pythonBash.png

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 22 of 46





















TWiki Slide Show
Next
Very basic Introduction to Python
Assignments look pretty much the same as assignments in other programming languages.

However, in Python you do not need to declare the variables.

The interpreter finds the right type by itself.

Here an example:

assignment.png

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 23 of 46





















TWiki Slide Show
Next
Strings in Python
Here some string examples:

strings.png

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 24 of 46





















TWiki Slide Show
Next
Conditions
We have seen conditions already in the very first example

conditions.png

As you can see, there are no braces around the conditional block but it is indented

# indicates an comment

In addition to the if statement above we have elif and else

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 25 of 46





















TWiki Slide Show
Next
while loop
Like in other programming languages we have different types of loops.

Here is the example of a while loop which calculates the Fibonnaci series:

while.png

This program uses multiple assignments a,b are assigned in the same line

Again you can see that the block starts with “:” and is indented.

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 26 of 46





















TWiki Slide Show
Next
Lists
Python knows a number of compound data structure the most versatile of which is the list

Lists may contain different data types but usually all members of lists have the same type.

Lists have similar properties as strings:

  • define sub-lists
  • get the length of lists
  • concatenate lists
lists.png

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 27 of 46





















TWiki Slide Show
Next
More data structures
Lists provide many different functions (methods) to operate on them:

Append, extend, remove, pop, index, count, sort … Have a look at the tutorial for details

The are also further complex data structures which we don’t have the time to go into:

  • tuples
  • sets
  • dictionaries

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 28 of 46





















TWiki Slide Show
Next
For loops
Lists are used in for loops. In Python the iterator can be of any type.

Using the range function you can create the same type of for loops we know from C.

Keywords like continue and break have the same meaning.

pass does nothing and is used only where a statement is syntactically needed

for.png

... and the result:

forResult.png

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 29 of 46





















TWiki Slide Show
Next
Function Definition
Like in other high level languages you can create functions

and call them later in your program

functionDef.png

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 30 of 46





















TWiki Slide Show
Next
Modules
We may want to keep function definitions in separate files

and use these definitions in several main programs.

In our example of the Fibonacci numbers we can save the definitions in a file called fibo.py

In order to use the definitions we must import them with

import fibo

In order to call the functions we have to all the module name:

fibo.fib(20)

or if we we want to import a single function:

from fibo import fib

fib(20)

The module name is found in the variable __name__

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 31 of 46





















TWiki Slide Show
Next
Module Example
modules.png

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 32 of 46





















TWiki Slide Show
Next
Calling functions from a Module
This is how we call a function (method) from a module.

moduleCall.png

... and this is the result:

moduleCallResult.png

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 33 of 46





















TWiki Slide Show
Next
Executing Modules
Often modules contain only function or class (see later) definitions

However it is also possible to include the function calls (the main routine)

into the module e.g. to demonstrate how the functions are to be used.

In this case the name of the module changes to __main__

We can therefore find out if the module is imported or executed by checking the name variable:

if __name__ == "__main__"

this executes the main code only if not imported into a main program

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 34 of 46





















TWiki Slide Show
Next
Command Line Arguments
Programs can be called with arguments. When calling an editor you my give

the name of the file to be edited as an argument.

There may also be options that are passed as arguments, e.g.

ls -ls $HOME

These arguments can be read (as strings) in Python:

commandLineArgs.png

You may then convert an argument from string to int with

maxFib=int(argv[1])

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 35 of 46





















TWiki Slide Show
Next
Running the module with args
idleArgs.png

This code checks if we are running in idle, in which case it asks the user for the arguments.

In case we are called from the command line the arguments are already passed into sys.argv

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 36 of 46





















TWiki Slide Show
Next
Files
In order to read of write a file it must first be opened:

f = open(‘filename’,’w’)

After which you can write the file. In read mode, the ‘w’ must be replaced by ‘r’

files.png

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 37 of 46





















TWiki Slide Show
Next
Classes
In object oriented programming languages you can define classes

encapsulating data and functions (methods in the oo jargon) that act on these data.

You can create sub-classes having most of the properties of the

base class but provide more data and/or methods or some of the methods are modified (overridden).

This is called inheritance.

Python implements these features.

While in many object oriented languages we distinguish between public and private data,

in Python all data are public.

A convention is to precede a variable name with an ‘_’ if it is not intended for use external to the class.

---+++

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 38 of 46





















TWiki Slide Show
Next
Creating Classes
The syntax for creation of classes is similar to functions

createClass.png



i is an instance variable

f is a method

You may define a method with name __init__which is called when

the instance object of the class is created (in the above example: mc = MyClass ()

The short description of the class can be found in the instance variable _ _doc__

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 39 of 46





















TWiki Slide Show
Next
Classes and the Sensors
As classes describe real world objects they are particularly using for describing our sensors

Connection details, calibration parameters etc. can be described in the instance variables

Actions of the sensors like triggering, readout etc. are implemented in methods.

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 40 of 46





















TWiki Slide Show
Next
Instance initialization
There is a special method named _ _init__ which is called when the instance of a class is created.

This method allows to

  • Initialize instance variables
  • Initialize e.g. registers, addresses and the like
  • Setup I/O for sensors
and much more.

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 41 of 46





















TWiki Slide Show
Next
A Class Implementation realizing a simple Calculator
calculatorClass.png

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 42 of 46





















TWiki Slide Show
Next
A Sensor Demo
cabling.png

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 43 of 46





















TWiki Slide Show
Next
The cobbler PinOut
cobblerPinout.png

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 44 of 46





















TWiki Slide Show
Next
The Sensors
This is the idea:

The hardware includes:

  • a color sensor
  • an ultra-sonic distance sensor
  • an rgb LED (not strictly necessary)
We create a virtual world showing the ultra-sonic sensor.

When a colored paper sheet is placed in front of the senors then this sheet

with the right color will be seen in the virtual world.

The distance of the sheet to the sensors is also reflected in the virtual world.

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 45 of 46





















TWiki Slide Show
Next
The sensors in the virtual world
We see the distance sensor in front and the color sensor

with its LEDs switched off, in the back

The (white) paper sheet is in frontof the distance sensor

The red ball is the center of the coordinate system

scene-1.png

First slide Previous Next Last slide
COPYRIGHT © 2024 by the contributing authors
Slide 46 of 46





















First slide Previous End Presentation






























-- Uli Raich - 2018-04-24

Comments

I Attachment History Action Size Date Who Comment
JPEGjpg RASPBERRY-PI-3_sml.jpg r1 manage 300.6 K 2018-04-24 - 17:49 UliRaich  
PNGpng assignment.png r1 manage 15.9 K 2018-04-24 - 19:42 UliRaich  
Texttxt babylon.py.txt r1 manage 0.3 K 2018-04-24 - 19:15 UliRaich  
PNGpng broadcom.png r1 manage 52.9 K 2018-04-24 - 18:38 UliRaich  
PNGpng cabling.png r1 manage 1315.7 K 2018-04-24 - 20:50 UliRaich  
PNGpng calculatorClass.png r1 manage 42.9 K 2018-04-25 - 12:27 UliRaich  
PNGpng cobbler.png r1 manage 23.8 K 2018-04-24 - 19:10 UliRaich  
PNGpng cobblerPinout.png r1 manage 281.5 K 2018-04-24 - 20:50 UliRaich  
PNGpng commandLineArgs.png r1 manage 6.4 K 2018-04-25 - 12:09 UliRaich  
PNGpng conditions.png r1 manage 19.3 K 2018-04-24 - 19:47 UliRaich  
Texttxt conditions.py.txt r1 manage 0.3 K 2018-04-24 - 19:15 UliRaich  
PNGpng createClass.png r1 manage 11.8 K 2018-04-25 - 12:20 UliRaich  
PNGpng esp32.png r1 manage 109.8 K 2018-04-24 - 17:53 UliRaich  
PNGpng esp32price.png r1 manage 172.0 K 2018-04-24 - 17:49 UliRaich  
Texttxt fib1.py.txt r1 manage 0.4 K 2018-04-24 - 19:15 UliRaich  
PNGpng files.png r1 manage 27.1 K 2018-04-24 - 20:50 UliRaich  
PNGpng for.png r1 manage 12.2 K 2018-04-24 - 20:06 UliRaich  
Texttxt forLoop.py.txt r1 manage 0.2 K 2018-04-24 - 19:15 UliRaich  
PNGpng forResult.png r1 manage 3.4 K 2018-04-24 - 20:06 UliRaich  
PNGpng functionDef.png r1 manage 24.4 K 2018-04-24 - 20:09 UliRaich  
PNGpng idle.png r1 manage 317.8 K 2018-04-24 - 19:31 UliRaich  
PNGpng idleArgs.png r1 manage 14.2 K 2018-04-25 - 12:13 UliRaich  
PNGpng lists.png r1 manage 35.0 K 2018-04-24 - 19:54 UliRaich  
PNGpng m6800.png r1 manage 26.3 K 2018-04-24 - 17:49 UliRaich  
PNGpng moduleCall.png r1 manage 13.0 K 2018-04-24 - 20:50 UliRaich  
PNGpng moduleCallResult.png r1 manage 17.3 K 2018-04-24 - 20:50 UliRaich  
PNGpng moduleRun.png r1 manage 14.2 K 2018-04-24 - 20:50 UliRaich  
PNGpng modules.png r1 manage 30.8 K 2018-04-24 - 20:14 UliRaich  
PNGpng pythonBash.png r1 manage 108.7 K 2018-04-24 - 19:42 UliRaich  
PNGpng pythonInterpreter.png r1 manage 38.8 K 2018-04-24 - 19:31 UliRaich  
PNGpng pythonScript.png r1 manage 35.3 K 2018-04-24 - 19:31 UliRaich  
PNGpng pythonShell.png r1 manage 32.4 K 2018-04-24 - 19:31 UliRaich  
PNGpng remoteDesktop.png r1 manage 378.8 K 2018-04-24 - 18:47 UliRaich  
PNGpng scene-1.png r1 manage 16.4 K 2018-04-25 - 12:34 UliRaich  
Texttxt simpleForLoop.py.txt r1 manage 0.2 K 2018-04-24 - 19:15 UliRaich  
PNGpng ssh.png r1 manage 293.5 K 2018-04-24 - 18:47 UliRaich  
PNGpng strings.png r1 manage 77.6 K 2018-04-24 - 19:46 UliRaich  
Texttxt strings.py.txt r1 manage 1.0 K 2018-04-24 - 19:15 UliRaich  
PNGpng twiki.png r1 manage 373.8 K 2018-04-25 - 07:26 UliRaich  
PNGpng while.png r1 manage 7.6 K 2018-04-24 - 19:54 UliRaich  
Texttxt while.py.txt r1 manage 0.1 K 2018-04-24 - 19:15 UliRaich  

This topic: AFNOG > WebHome > Slides > IntroductionToPython
Topic revision: r4 - 2018-04-25 - UliRaich
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback