Tags:
create new tag
view all tags

Course on Internet of Things

Exercises Session 1:

Introductory remarks:

The scripts we are going to develop during this exercise session do not depend on any system issues: We do not use command line arguments not available in MicroPython nor do we use any hardware specific features which are not available on a PC. The exercises can therefore be developed and run on the ESP32 but also on any standard PC with Python3 installed.

Exercise 1: Use of REPL

Connect to your ESP32 with minicom or thonny. You may try the same thing running Python3 on your PC.

Using REPL:

  • print “Hello World!”

  • read in a text using input() and print it

  • Calculate

    calculations.png

  • Calculate sin(30°)
    If you see errors, how do you correct them? Are the results correct?

  • Finally make the "print Hello World!" command a script and execute it.

Exercise 2: A simple calculator

Write a script that assigns the values 5 and 3 to the variables a and b respectively

Print the results of 4 basic arithmetic operations:

  • a+b

  • a-b

  • a*b

  • a/b

If you use integer format when printing the result, you will see the result truncated to an integer. Can you correct changing the format?

https://afnog.iotworkshop.africa/pub/IoT_Course_English/REPLAndStandardPythonProgramming/calculatorV1.py.txt

Improve this program asking the user to enter 2 real numbers (floats) separated by a space. This is how it should look like:

calcOk.png

If this happens:

invalidFloat.png

when the user mistypes and enters something that is not a real number, can you capture the error and simply ask the user to repeat his input, until you get 2 correct floating point numbers?

https://afnog.iotworkshop.africa/pub/IoT_Course_English/REPLAndStandardPythonProgramming/calculatorV2.py.txt

Bonus points: Writing a parser for user input is rather easy if the numbers and operator are separated by spaces (have a look at the split method of strings). It is quite a bit more tricky if you allow entering calculations without spaces between the operands and the operator. Can you write a parser accomplishing this?

Hint: A very elegant solution to this is the use of regular expressions and Python provides a module helping you with this:

https://docs.micropython.org/en/latest/library/ure.html

A float is defined as follows:

  • zero or more spaces

  • followed by one '+' or one '-'
  • followed by
    • a ‘.’ followed by at least one digit
  • or
    • at least one digit followed by zero or one ‘.’ followed by zero or more digits
  • followed be zero of more spaces

Try your parser on this input:
Input ok or not ok
5.3+4.7 ok
5.3++4.7 not ok
5..3 + 4.7 not ok
.3+.7 ok
5.3+4b7 not ok
empty string not ok
5.3+. not ok
5.3+ not ok
-1--1 ok
--1--1 not ok
Try also several spaces in between operands and operator.

https://afnog.iotworkshop.africa/pub/IoT_Course_English/REPLAndStandardPythonProgramming/calculatorV3.py.txt

Exercise 3: Conditions

Like in exercise2, start with 2 numbers a,b with values 5 and 7. In your program check which of the 2 numbers is bigger and print the result.

Then improve the program asking the user for 2 integer numbers. Make sure he enters 2 correct numbers and capture possible errors. This is a typical output:

conditions.png

Exercise 4: The Fibonacci series

The Fibonacci number series is defined as:

F(0) = 0; F(1) = 1

F(n) = F(n-1) + F(n-2)

  • Calculate and print out the Fibonacci numbers up to F(n). Get n from the user where n >= 0
Try your program for n=0, n=1, n=2, n=3, n=20

  • Ask the user up to which is the maximum number up to which you should calculate.

Exercise 5: A bit of Mathematics: Calculate the sine function

Write a script that asks the user for an angle in degrees. Calculate the sine of this angle.

Exercise 6: Classes

Write a Python class with methods calculating mathematical number series. These series should be calculated:

  • The Fibonacci numbers up to F(n). n is passed as parameter to the method
  • The Fibonacci numbers smaller than max. max is passed as parameter to the method
  • The prime numbers up to max
  • Factorial:
    factorial.png
  • The geometric number series:
    geometric.png
  • The harmonic number series:
    harmonic.png
    Can you tell what the following series calculate?
mathSeries.png

Add these series to your class and try. Write a test script exercising the different methods.

Please also have a look at the Wikipedia page on number series: https://en.wikipedia.org/wiki/Series_(mathematics)

In order to make this exercise run on the ESP32 you must first upload your mathSeries.py module implementing the MathSeries class into the file system of the ESP32. Create a directory called lib on the ESP32 file system and put your module there:

ampy mkdir /lib

ampy put mathSeries.py /lib/mathSeries.py

Once this is done, go to the REPL window of thonny and

import mathSeries

You can now create an instance of the MathSeries class:

series = mathSeries.MathSeries()

When running on a PC you may want to plot the series as well. If you don't know how to plot data in Python, you will find all the information needed here:
https://matplotlib.org/3.2.1/index.html

Here is the exercise sheet in odt format:

https://afnog.iotworkshop.africa/pub/IoT_Course_English/REPLAndStandardPythonProgramming/exercise_1.odt

-- Uli Raich - 2020-05-03

Comments

Topic attachments
I Attachment History Action Size Date Who Comment
PNGpng calcOk.png r1 manage 21.7 K 2020-05-03 - 19:52 UliRaich  
Texttxt calculatorV1.py.txt r1 manage 0.4 K 2020-05-28 - 09:34 UliRaich  
Texttxt calculatorV2.py.txt r1 manage 1.3 K 2020-05-28 - 09:34 UliRaich  
Texttxt calculatorV3.py.txt r1 manage 3.2 K 2020-05-28 - 09:34 UliRaich  
PNGpng conditions.png r1 manage 28.8 K 2020-05-03 - 20:25 UliRaich  
PNGpng conversionError.png r1 manage 19.3 K 2020-05-03 - 19:42 UliRaich  
PNGpng e.png r2 r1 manage 1.5 K 2022-02-08 - 16:45 UliRaich  
PNGpng euler.png r1 manage 1.5 K 2022-02-08 - 16:50 UliRaich  
Unknown file formatodt exercise_1.odt r2 r1 manage 126.6 K 2022-02-08 - 17:45 UliRaich  
PNGpng factorial.png r1 manage 2.8 K 2020-05-04 - 12:48 UliRaich  
PNGpng geometric.png r1 manage 3.9 K 2020-05-04 - 12:48 UliRaich  
PNGpng harmonic.png r1 manage 1.6 K 2020-05-04 - 12:53 UliRaich  
PNGpng invalidFloat.png r1 manage 32.0 K 2020-05-08 - 13:38 UliRaich  
PNGpng ln2.png r1 manage 2.0 K 2020-05-04 - 12:48 UliRaich  
PNGpng mathSeries.png r3 r2 r1 manage 9.7 K 2022-02-08 - 17:36 UliRaich  
PNGpng pi.png r1 manage 2.7 K 2020-05-04 - 12:48 UliRaich  
PNGpng wallis.png r1 manage 6.1 K 2020-05-05 - 14:31 UliRaich  
PNGpng wallis1.png r1 manage 14.8 K 2020-05-05 - 14:35 UliRaich  
PNGpng wallis_prod.png r4 r3 r2 r1 manage 4.2 K 2022-01-27 - 09:46 UliRaich  
Edit | Attach | Watch | Print version | History: r17 < r16 < r15 < r14 < r13 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r17 - 2022-02-08 - 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