204 IT: Python Coding Course (204.html)
Keywords
ICH180RR RPi IX Python Raspberry Pi "204 IT: Python Coding Course (204.html)"
number string list variable literal append = assignment print input Feynman
ambLight KY18 KY-18 KY-018 10K0 resistor 6K8 "CD sensor" "CDS sensor"
KY-018INV sortF.py sortFquik.py Terminal grep sort RP3A0
"Raspberry Pi Zero 2 W" "Pi Zero 2 W" Zero2W "matchbox-keyboard bad"
matchbox-keyboard-BAD "On-Screen Keyboard"
Onboard Keyboard "Onboard keyboard" snippets
/KeywordsEnd
(To enlarge .....Click it)
IX or DC (IX by DC) or "|><"
This IX software is a part of the IX family of software that I use.
Introduction
This is a web page for people wishing to learn how to code using the Python language.
Course Topics (By Day)
Course Topics / Class Day
-
1. First Coder and Computer, Punched Cards
Numeric, String Variables, Literals, Lists
Statements: =, print, while, input -
2. Numbers: Integer, Float, Scientific Notation
print formatting
Arithmetic: + - * / ** -
Boolean and Logic:
True and True
True and False
False and True
False and False -
Boolean or Logic:
True or True
True or False
False or True
False or False -
boolean operators: and or not
-
E = I*R (Image 3)
-
LED
-
3. Circuit Logic
Print Formats
Valves & Transistor
Statement: function -
Python String Methods (Source 04)
-
-
-
Day 1
a = 2
print(a)
a = 6
print(a)
cList = []
cList = ["Ford", 2, "Joe"]
print(cList)
cList.append("347")
print(cList)
print(len(cList))
Day 2
x = 3/2
print(x)
x = 3/20
print(x)
x = 3/200
print(x)
x = 3/2000
print(x)
>>>0.0015
x = 2000/3
print(x)
>>>666.66666666
x = 12345678901234567890
y = x * 100000000000000000
print(y)
>>>1.2345678901234568e+36
cList=["a", "b", "c", "d"]
print(cList[2])
>>>c
dList=[2,4,6,8,111,12,14]
print(dList[2:5])
>>>6,8,111,12
eList=list((8,111,12))
print(eList)
>>> 8,111,12
print without format
name = "Eric"
print("Hello,", name, ".")
>>> 'Hello, Eric .'
print with placeholder and %
name = "Eric"
print("Hello, %s ." % name)
'Hello, Eric .'
print with format
name = "Eric"
txt = "Hello, {}."
print(txt.format(name))
>>>Hello, Eric.
price = 49
txt = "The price is {:.2f} dollars"
print(txt.format(price))
>>>The price is 49.00 dollars
txt = "The price is {:7.2f} dollars"
print(txt.format(price))
>>>The price is 49.00 dollars
price = 49111
txt = "The price is {:9.2f} dollars"
print(txt.format(price))
>>>The price is 49111.00 dollars
price = -49111
print(txt.format(price))
>>>The price is -49111.00 dollars
import subroutines
import time
while True :
time.sleep(2)
print("after 2 seconds")
#while end
>>>after 2 seconds
>>>after 2 seconds
>>>after 2 seconds
ctrl-C or ctrl-D
Turn On LED using Zero_led.py
#Zero_led.py
import time
from gpiozero import LED
led = LED(14) # GPIO 14 = phys pin 08
# lead with no resistor is ground phys pin 06
while True:
led.on()
time.sleep(1)
led.off()
time.sleep(1)
# done
#************************************************
The Sun contains about 92% hydrogen and 8% helium, with just a tiny bit of the other common elements we find on Earth. Compare that to Earth, where the most common elements are oxygen, magnesium, silicon, and iron.
The mass of the Earth is approximately 5.97×1024 kg. In bulk, by mass, it is composed mostly of iron (32.1%), oxygen (30.1%), silicon (15.1%), magnesium (13.9%), sulfur (2.9%), nickel (1.8%), calcium (1.5%), and aluminium (1.4%); with the remaining 1.2% consisting of trace amounts of other elements.
Day 3
aStr=" abc "
print(aStr)
bStr = aStr.strip()
print(bStr)
TURN ON LED Using Pushbutton
import time import RPi.GPIO as GPIO
# Pins definitions
btn_pin = 4
led_pin = 12 # Set up pins 15
GPIO.setmode(GPIO.BCM)
GPIO.setup(btn_pin, GPIO.IN)
GPIO.setup(led_pin, GPIO.OUT) # If button is pushed, light up LED
try:
while True:
if GPIO.input(btn_pin):
GPIO.output(led_pin, GPIO.LOW)
else:
GPIO.output(led_pin, GPIO.HIGH)
# When you press ctrl+c, this will be called
finally: GPIO.cleanup()
Work or Energy
joule: unit of work or energy in the International System of Units (SI); it is equal to the work done by a force of one newton acting through one metre. Named in honour of the English physicist James Prescott Joule, it equals 107 ergs, or approximately 0.7377 foot-pounds. 1 joule = 10**7 ergs = 0.7377 foot-pounds.
See Images 01 and 02. 1 watt = 1 joule / sec = 1kg·m²·s**-3
Images
(To enlarge .....Click it)
Periodic Table
(To enlarge .....Click it)
LED (flat [short leg]: ground)
(To enlarge .....Click it)
Diode Depletion Regions
(To enlarge .....Click it)
Diode Curve
(To enlarge .....Click it)
Image 03 E = I * R
(To enlarge .....Click it)
NPN
(To enlarge .....Click it)
NPN depletion regions
(To enlarge .....Click it)
PNP current components
Day 4
Day4
Escape characters
https://www.w3schools.com/python/python_strings_escape.asp
Assembly Language- RPi
file:///home/pi/Downloads/MagPi116.pdf
7bit Ascii
https://en.wikipedia.org/wiki/ASCII#/media/File:USASCII_code_chart.png
JSON example
JSON_example.txt (See Source 07)
fwrite2.py
SQL DataBase
SQL
Day 5
Feynman (Nobel Prize Winner)
Feynman 666
9 | 999999 + 96
------- -----
9999999 1722766 762 <- Feynman Number
(To enlarge .....Click it)
Feynman Diagram
Day5
Tristan02.py
iGalri.html
PythonINFO_prettify.txt
use Geany vs
PythonINFO_prettify.html
Geany html
json
py
Serial ASCII
http://ephotocaption.com/a/179/179.html
See YouTube Video (Video Source 01 ) to view serial data on an oscilloscope.
(To enlarge .....Click it)
Ascii Data On An Oscilloscope
ordAscii.py output
The ASCII value of 'p' is 112 in base 10
ch = 'p'
ch in hex is x70.
ch in octal is o160.
ch in binary is 1110000
The price is 112.00 dollars
ordAscii.py source
# Program to find the ASCII value of the given character
progName="ordAscii.py"
ch = 'p'
print("The ASCII value of '" + ch + "' is", ord(ch))
print("ch = 'p'")
print("ch in hex is x%x." % ord(ch))
print("ch in octal is o%o." % ord(ch))
#print("ch in binary is 0b%0b." % ord(ch))
chInt = 112
# ? format number as binary (in base 2)
string = "ch in binary is "+ f'{chInt:b}'
print(string) # 1110000
price = 112
txt = "The price is {:.2f} dollars"
print(txt.format(price))
strElements.py
progName: strElements.py
strTest: #abcdef
strTest[0:7] #abcdef
len(strTest) 7
lenStr=len(strTest)
strTest[0:lenStr] #abcdef
strTest[0:0]
strTest[0:1] #
strTest[1:2] a #new
strTest[1:3] ab #new
strTest[0:-1] #abcde
strTest[0] #
strTest[1] a
strTest[-1] f
strTest[-lenStr] #
strTest[1:-1] abcde
strCap=strTest[1:-1].capitalize() Abcde
iGal_co0001i.txt
iGal_co0001i.html
/Days4_and_5.txt
Day 6 : Coding Exercises
Ex01.py
Purpose to reverse the words in a sentence
1. Create a file named Ex01Data.txt containing two rows of words
eg saw kitten joe
gniht yraM miT
2 crete a function that accepts a word (containing no spaces)
the function should return the word spelled backwards
3. Write a program that reads the file Ex01Data.txt separates
each word, calls the function to spell the word backwards
4. prints each resulting line on the screen. . . eg
eg was nettik eoJ
thing Mary Tim
Ex02.py
Purpose: to "draw" a letter on the screen
1. Create a function that accepts a single character
eg "a"
It returns a string that "draws" the character
eg " xxxx x\n
xx xxx\n
xx xxx\n
xx xxx\n
xxxx x\n"
2. Write a program that calls the function passing
the character eg "a". The subroutine will return
the "drawing" of the character. The program then
prints the drawing of the character on the screen
using the print statement.
Ex03.py
Purpose: To send Morse Code using the LED.
1 Write a program that flashes a character using
Morse Code.
e . i .. s ...
t - m -- o ...
It will blink the LED to display the character.
2. The program will first ask the user how long a
dot (.) should be. eg .5 means ".5 seconds"
A dash (-) should be the length of 3 dots.
The time between 2 parts of a character should be
2 dot times
The time between 2 characters should be at least
2 dash times.
3. The program asks the user to input one or more
of the six characters above above to form a word.
eg "mom" "time" or "i"
4. The program will call a function sending it each character
in the word. The function will turn on and off the
LED to "send" the character in Morse Code.
5. The program will get the user to input a "word"
and will call the subroutine to "send" each
character of the word in Morse Code.
6. To test the program, just "watch" the LED blinking.
HINT: Use a Python dictionary to store the characters.
Also put the following in the dictionary
"/" is the sleep time between 2 parts of a character
" " is the sleep time between 2 characters.
Refer to Source 08 to hear Morse Code audibly.
Day 7
OHM's law
E = I x R ........ E(volts) = I(amps) x R(ohms)
Resistance of 2 Resistors in Series.
R(series) = R1 + R2
LED symbol
(To enlarge .....Click it)
LED (flat [short leg]: ground)
Resistance of an LED is about 15 ohms in a 3v3 or 5v0 circuit.
How much current passes through an LED in a 3v3 circuit (with no resistor)?
How much current passes through an LED in a 3v3 circuit (with a 330 ohm resistor)?
How much current passes through an LED in a 3v3 circuit (with a 1000 ohm resistor)?
What is a CdS cell?
The resistance of a CDS "photo cell" varies with the amount of light falling on it:
~ 500 ohms in direct sunlight
~ 5,000 ohms in a lit room
~500,000 ohms in the dark
(To enlarge .....Click it)
CdS Light-Dependant Resistor (PhotoCell)
In the real world of electronics, a common type of light sensor is called a CdS cell, or CdS photoresistor. They have historically used a material called cadmium sulfide to measure the amount of light falling on them. Cadmium is a toxic metal so the use of CdS cells is now very much restricted and other materials have taken their place.
The digLight Python circuit for the Raspberry Pi
This KY-018 circuit reads digLight inverted. To read digLight (uninverted) , interchange 3v3 and GND. This KY-018INV will have 3 leads:
wire GPIO Phys
color to pin pin
***** ********************* **** ****
red CdS cell 3V3 17
yellow S to 10K Var. Resist. 17 11
green Ground GND 9
Adjust 10K Var. Resist. to be 6K8 ohms
(To enlarge .....Click it)
Inverted ambLight/digLight sensor (KY-018 Schematic)
(To enlarge .....Click it)
:94 CdS photo-resistor w 5K6 resistor for BreadBoard
The :94 device needs a 90 degree M-F header to attach to a breadboard for the CdS to be accessible.
(To enlarge .....Click it)
:95 CdS photo-resistor w 10K0 resistor for RPi
The :95 device is a CsD with a 10K0 variable resistor for an RPi GPIO 4 (phys pin 7).
Dupont Connectors
The multicolored Dupont connectors (jumpers) can be M-M or M-F or F-F.
(To enlarge .....Click it)
Dupont Connectors (with Male end)
Program to read ambient light as 1 or 0
The following Python program can be used on the Raspberry Pi to read the Binary value of digLight from GPIO17 (which is physical pin 11). Because the Raspberry Pi cannot read analog signals, it cannot read ambLight as a numerical (analog) value.
import RPi.GPIO as GPIO
import time
progName="digLightTest.py"
print("starting ",progName)
print(" Ctrl-C will end the program")
digLight_pin=17 #GPIO pin 17 is physical pin # 11 on the Raspberry Pi
# verified by Tristan Marcoux on 2023GJul25
# CdS is connected between digLight and nominal 3V3 which is often 3.75v
# 6.8k resistor is connected between digLight and GND.
# 10k resistor is too high when the back and sides of the CDS are not kept dark.
# The 6.8k resistor even detects between dim light and dark.
# It is recommended to use a 10k0 rheostat (variable resistor) initially set to 6K8.
#setup the pins in the software
GPIO.setmode(GPIO.BCM)
GPIO.setup(digLight_pin,GPIO.IN)
try:
while True:
if GPIO.input(digLight_pin):
print("digLight is 1: ON i.e. lit")
else:
print("digLight is 0: OFF i.e. dark")
#if end
time.sleep(1) #sleep for 1 second
#while end
finally:
print("ending ",progName)
#try end
# /digLightTest.py
#program end
[From Article 153 (Source 09)], the . . . . . digLightTest program was successfully tested on 2021BFeb13 by the author. This PiR2Null device can be used by the programmer to ask for a reply of "Yes" or "No" without the program being "stuck" waiting for an (absent?) operator to reply. While the program is running, to reply "Yes", cover the photocell by touching it with your finger. When covered, the program will say "dark". The same effect can be produced by turning on/off the light switch in a dark room. However, if the room is well lit by natural daylight, it is necessary to cover the photocell somehow to achieve a "dark" result.
To terminate the above program, press ctrl-C. This program was tested by D@CC on 2021BFeb09.
Refer to Video Source 02 for a demo of a CDS PhotoCell (KY-018) and a LED that turns ON when the CD photocell detects "darkness".
On-Line Book: Pico Tips and Tricks (Source 10)
The Raspberry Pi Pico W is available from ThePiHut (US$ 8.93) . Readers are advised
to purchase the device with soldered headers if possible.
Refer to Source 10, a book by Malcolm Maclean for many Thonny programs that explore the Pi Pico board. View a short "teaser" preview at Video Source 03.
This book will be of interest to anyone beginning to use the Raspberry Pi Pico or Pico W.
There is an error in the book in Source 10. About 20% through the book, in the section named "General Purpose Input / Output (GPIO)" subsection: "Pull-up and Pull-down Resistors", the diagram named "Pull-down, Pull-up and Floating connections" showing the pull-resistors is wrong. A corrected version is shown below:
(To enlarge .....Click it)
Pull-down, Pull-up and Floating connections (Corrected)
In the above corrected image, the label "GPIO" is the GPIO pin to which the pull-up or pull-down resistor has been connected. In all 3 cases, the GPIO pin is also driven by internal pico electronics and is usually connected to external electronics.
The book in Source 10 provides connection diagrams and MicroPython code to permit the Pico or Pico W to control the following impressive list of devices:
-
on-board (Pico) green LED
-
WiFi
-
hosting a web-page
-
reed switch
-
servo motor
-
non-servo motor
-
Maker drive board (US$4.32 Source 12)
-
stepper motor
-
SD or micro-SD card
-
MQ series Gas Detector
-
Distance Measurement
-
on-board (Pico) Temperature
-
DS18B20 temperature sensor
-
AHT10 Temp & Humidity sensor
-
Motion Sensing with a PIR sensor
-
HC-SR501 sensor
-
AM312 sensor
-
vibration sensors
-
Piezoelectric vibration sensor
-
IMU sensor
-
3-axis Accelerometer sensor
-
GY-521 IMU module using a MPU-6050 sensor
-
OLED display
-
the ssd1306 PyPI module
-
a dot matrix display
-
addressable LEDs
-
Prometheus and Grafana
-
Sending an email (see Source 13)
-
Real Time Clock (RTC)
-
Universal LED blink
The Maker Drive Board mentioned above is available from Cytron.io or ThePiHut.com . For more information, see the Maker Drive DataSheet at Source 12.
Day 8 Using Terminal and SORTING
SOME TERMINAL COMMANDS
See Source 24 for more information about the Raspberry Pi OS .
Source 22 describes all of the Linux commands including those below eg "sort".
folders: Desktop/Day8
cat a b >c # concatenate files
cd newdir # change directory
cp a b # copy a file
dir # directory list
grep "string" tFile # display lines containing "string" in tFile
grep --help # display grep options and examples
ls # list directory
more tFile # display a tFile
nano tFile # edit tFile in Terminal
rm tFile # remove (delete) tFile
sort tFile >bFile # sort tFile into bFile
sort --help # display help options and examples
^ arrow # previous (up)
v arrow # next (down)
< arrow # left
> arrow # right
Enter to execute # run the command as shown
See Source 28 (my Article 170) for a longer list (of 50 Useful Linux Terminal Commands).
Exercises for Sorting Manually
Sort order is according to ASCII character numerical order.
1A. Create a file named "fox.txt" (one word per line) containing:
the quick brown fox jumps over the lazy dog
1B. Use "grep" to find a record starting with string "jum"
> $ grep "jum" fox.txt
2. Use a text editor to sort the words ("brown" should be first).
3. Write it out with the name "fox_sorted.txt"
4. Write a Python program to sort any text file (at end of lecture).
5. Use nano in Terminal to manually sort the file
> $ cd Desktop/Day8
cp fox.txt fox_s.txt
nano fox_s.txt
Ctrl-o
Ctrl-z
6. use sort in Terminal to sort the file
> $ cd Desktop/Day8
sort fox.txt >fox_sort2.txt
7. use cat to create a file named file1
> $ cd Desktop/Day8
cat >file1
rrrrrr
xyz
Ctrl-d
8. use cat to create a file named file2
> $ cd Desktop/Day8
cat >file2
abc
Ctrl-d
9. use "dir" and "ls" to display the Directory
> $ dir
ls
cd Desktop/Day8
dir
10. use "more" to display file1
> $ cd Desktop/Day8
more file1
11. use "cp" to copy file1 to file3
> $ cd Desktop/Day8
cp file1 file3
ls
more file3
Ctril-c
12. use "rm" to delete file3
> $ cd Desktop/Day8
rm file3
ls
13. use "|" for piping
use cat to join 2 files, show the result, then sort them
> $ cd Desktop/Day8
cat file1 file2 > file4
ls
more file4
> $ cat file1 file2 | sort file5
ls
more file5
14. Display sort help
> $ sort --help
Also see Source 23 for the "sort" section of Linux Man7 Manual (Source 22)
> $ help sort
SYNTAX
sort [OPTION]... [FILE]...
sort [OPTION]... --files0-from=F
OPTIONS
-b ignore leading blanks
. . .
-r reverse sort results
-c check for sorted input; do not sort
-o fText write output to fText file
etc
Program (Algorithm) to sort a text file
Name it mySort.py
0. Create a function named sort2(a,b) to compare 2 records (text strings)
and return the lowest (the record to appear first when sorted)
Test this function using a small test program
Write the mySort.py program to do the following:
1. recNA=1
2. Open the input file
3. lenN= number of records in input file
4. copy each record into an element of an array named rList
rList=[] # empty list (array)
recN=0
for rec in file1:
recN=recN+1
rList[recN] = rec
#for end
display the list of records to be sorted
print("rList:",rList)
5. Close the input file
6. Open the result file (initially empty)
7. Find the lowest (when sorting) record in rList (using sort2 function)
8. Write this record to the output file
9. Set this lowest record in rList to Null
10. so that it will be effectively "removed" from rList.
11. Repeat at step 7 to find the next lowest record
in rList.
12. Stop doing this when rList is empty (when all rlist records are null.
13. When done, close the result file
14. display the result file.
See Sources 20 and 21 for better Python programs to sort a text file
Other algorithms are a bubble sort and a Hashed key file sort.
Day 9
9.1 Create a String Sort program using the Python function "lowest()" from Source 32.
[lowest() returns the position of the lowest non-nul item, if any, in a list of strings.]
9.2 Connect and use a small powerful Raspberry Pi Zero-2-W (below).
9.3 Review the "Python CheatSheet" in Source 31 to identify "new" concepts.
9.4 Review "Raspberry Pi Benchmarks" in Article 170.
9.5 See the MagPi Magazine article "Learn Python..." on p77 in Source 30.
Day 10
Write 10 small Python Programs. See Source 38.
Day 11
Create a calendar for one month.
Day 12
For each string of letters that are input:
a) how many capital letters are there?
b) how many non-capital (lower case) letters are there?
c) how many digits are there?
d) how many other letters are there?
"other" means not capital, not non-capital, not digits.
examples are "$&() etc"
e) how many spaces are there?
f) what is the highest digit in the string?
g) how many characters are vowels?
h) If "Boo" is in the string, print out "Boo" and exit the program
Extra Difficulty
i) what is the highest integer in the string?
example "A431C998a$47." highest integer is 998
j) Only in the case of a string of 4 lower case letters;
print out all three letter words that can be generated
using only the lower case letters. These three letter
words must be of the form: non-vowel, vowel, non-vowel
All words from the string "xopt" would be:
xop
xot
top
pox
tox
pot
xox
pop
tot
All words from the string"mopi" would be:
mop
mip
pom
pim
mom
mim
pop
pip
Day 13
(To enlarge .....Click it)
Exercise 56B
Day 13 is from Source 41.
Day 2024.01
Topics:
Audio Devices
Data Base Tables
Hot CPU (RPi 5)
Bad Code (Doesn't use sleep when it should)
Use copilot to
Write a python program to sort a dequential file
Code Refresher
Exercise 2024.01.01 write out a file
Read a person' full name
Read their date of Birth
Read their birth city
Write it to a file (comma delimited)
if their full name is nul, close the file
Exercise 2024.01.02 Audio Hookups
Do the Audio Experiement in Source S219:12
Exercise 2024:01,03 The need to throttle
Do a loop that begins with 1
Muliply it by 3
Divide by 2
Print the value
Do a loop counting T up to 1 million
Repeat the first loop forever
Use ctrl-c to stop the program
AI GPT 4o
Mixer Valve
Procedure to load RPi OS
Day 2024.02
1 SQL Data Structure (Source 42)
2 SQL Data Edit at Globat (Source 43)
Example is Eye of tAfrica (Richat Structure) in Mauritania, Africa
(To enlarge .....Click it)
Eye Of Africa (aka Plato's Atlantis??)
3 Customer Address SQL DataBase
4 SQL QUERY TYPES
SELECT INSERT UPDATE DELETE
5 SQL QUERY Example (untested)
SELECT * FROM Customer JOIN Address WHERE Customer_Name='Joe Smith';
Source: https://www.w3schools.com/sql/sql_where.asp
6 Coding EXERCISE EX2024_6 Analyze an image with poor resolution.
Write a program that will read the file named Hill.txt (Source 45). It is a very poor photo of
a hill. The background is represented by all the 0 s. The hill is represented by all of
the 9 s. Note that the "9"s are not contiguous (some breaks exist). The program must do 2 things:
a) decide the probable outline of the hill. Draw a continuous outline by inserting the
character "x" to form the outline. Each "x" must "touch" another "x". "Touch" means
that each "x" must be beside another "x" or be above another "x" or have a corner
touching the corner of another "x", like this:
x
xxx
x x
xxx xxxxx
x x
xxxxxxxxxxx
print out the result on the screen. The digits 0 or 9 can still be in the result.
It is the resulting outline formed by the "x" characters that is important.
b) color in the center of the "Hill" by inserting "Z" chractgers everywhere inside the
contiguous outline.
Hint (One possible method. . . there are many solutions)
Count (Add up all the values in the squares that are immediately above, below, beside or
diagonally adjacent to each square). Store these numbers in a matrix that has one number
(the total) that corresponds to the total count for each square in the Hill.txt file.
-End of program-
Day 2024.03
2024.03.1 Using SSD (Solid State Drives) NVMe (old) and SATA (new)
See old Web Source 204:47 named Create_New_SSD.txt
and new Web Source 204:48 named RPi_Boot-from-usb.txt
2024.03.2 Warning regarding use of list = [2]*4
This is 4 identical references to "2"
changing 1 of them changes all of them.
Refer to the two sample programs:
testMatrix.py and testMatrixB.py
2024.03.3 Warning regarding use of list = [0]*4
should use ([0])*4
2024.03.4 Review of Hill exercise: hillProgram.py
You must convert the matrix of characters
into a matrix of integers, but not using
"*" to repeat non-constants
2024.03.5 Review of Matrix reference format (from Day 02)
M[row][col]
Day 2024.04
2024.04.01 SQL Examples (Source 49)
2024.04.02 castellated nut with cotter pin
at Walmart.ca $1.05
(Hillman Kep Hex Nut with Free-Spinning, Assorted Sizes)
(To enlarge .....Click it)
Castellated Nut with Cotter Pin
Day 2024.05
2024.05.01 Coding Practise Example 1
Create a Serial file containing a list of fruits, one fruit per line.
Ask the user to input each fruit name, then write it to the file
When the fruit name is an empty string, close the file.
2024.05.02 Coding Practise Example 2
Print out a list of the powers of 2 ( 1 per line) stopping at 2 to the 15th power
2024.05.03 Coding Practise Example 3
Ask the user to input a single sentence with a single space separating the words
The program should search for each space and print out the word preceding the
space. Print out one word on each line.
Stop the program after printing out the last word.
2024.05.04 Coding Practise Example 4
Ask the user to input an single integer number (for example 18)
Print out each of the integer divisors of the number.
For 18, the integer devisors are 1,2,3,6
If the number that the user enters contains a "." write out an error message.
2024.05.05 Coding Practise Example 5
Ask the user to enter a word.
For each letter in the word, print the letter and its numerical position in the alphabet.
One example is the word "it"
print out "i,9" on the first line
print out "t,20" on the second line
At the end of the word, add the numbers and print out the total
So it should print "total:29"
2024.05.06 Coding Practise Example 6
Create a program that will "print" out a picture that is comprised of
a selection of "*". For example:
| *******
| ***
| ******
| ********
To do this, the string on each line will be composed of a number of spaces
followed by a number of asterisks.
Create a function called art(a,b) which will compose and print each string
a is the number of spaces, b is the number of asterisks
In the above example, the first line will be printed by art(4,7)
the second line by art(6,3) etc
Call art() enough times to create a "picture" of a circle (the sun) with its
widest diameter being 7 asterisks.
Do not worry if the result looks a bit squashed, instead of being a perfect circle.
Each line should begin with a "|".
Day 2024.06
The first programming languages used labels. A programmer could run some code, then go tun some other
code elsewhere in the program, by referring to the label identifying the location of the second group of code. Programs with many, many labels became very complex to follow. Such code is called "spaghetti code". With time, programmers broke their code into various subroutines that were invoked or called one after another. Each subroutine returned control to the "calling" program. But siimple subroutines were not passed any parameters. Eventually functions were used instead of subroutines because parameters could be passed to a function and results can be returned from a function. Eventually, it was discovered that, in most cases, labels were not really necessary. Error handling is one of the few cases where labels must still be used in Python. Before writing the following programs, write a simple program that requests two numbers, then divides the first number by the second. Test it with 5 and 0. An error should occur.
2024.06.01 Handling Exceptions (Errors)
A Python program usually halts when an error occurs. But the programmer can take other
actions when an error is "thrown". See Source 50 for more information about error handling.
The labels used are:
try:, except:, else:, and finally: .
The types of errors that can be handled are:
Division by zero
An empty file (that shouldn't be empty)
ctrl-c is typed by the user
etc
Program 2024.06.01
Write a program to accept two numbers from the user. Divide the first
number by the second number and output the result to the screen. Create a "try . . . finally"
code block to handle the case of division by zero. Each part of the "try . . . finally" should
display (print) a status statement to let the user see when each of the "try . . . . finally"
code sections are used.
Program 2024.06.02
Write a program that uses an input statement to ask the user's name and print it out. Detect
when a user hits ctrl-c. This is called a "KeyboardInterrupt". Handle this error by printing
a message that says "ctrl-c was encountered. This program will now exit." Then end the
program.
Program 2024.06.03
Write a function to be used in the "Hill" program from lesson 2024.02. This function named
"holeCount()" will analyse a matrix (specified in parameter 1) to see if it contains one or more
"donut holes". It will return the count of the donut holes found. The matrix will be full of
single characters. Some characters will be " " (blank) and others will be non-blank. If a group
of one or more blank characters is fully surrounded by non-blank characters (in all 8 directions),
it is considered to be a "donut hole". David will write this function.
Jacob has defined and will write a function (below) to add a layer of numerical characters
to a non-blank graphic contained in a matrix.
Create a function to add extra layers from 1 to 9 to a 16x16 "drawing" made using a matrix. Each
layer will be outside the drawing made by the characters in the matrix. A layer is added by
adding numbers (1-9 depending on which layer it is) and having all the digits from the previous
layer have no empty space and each new digit be touching the numbers from the previous layer.
Day 2024.07
Exercise 2024.07.01
Today's program shows how to display a changing character on the screen.
See Source 51 for the Pwait.py program that is somewhat self-explanatory.
The purpose of this program is to allow the user to modify each of the
parameters in order to control what is displayed in the terminal window.
The height of the display window should also be varied by the user.
In this program, the character displayed does not change, but many other
aspects of its environment do change.
When a film or video is shown, a different frame or image is displayed
at brief intervals. Films and television changes are about 1/30 of a second.
It is different for a film compared to television. A film shutter opens and
closes every 1/72 of a second, but each frame (image) changes only every
1/24 of a second. Television is different.
Television frames usually change 24 or 30 times per second. However each
horizontal line of a TV frame changes more often. This is done by first
changing every even-numbered line. Then the next frame changes all the
odd-numbered lines. This is done to make the image changes seem more fluid.
Many years ago, tests concluded that frame changes faster than 30 times
per second cause a human eye/mind to sense a "continuous" motion with
no noticeable flicker.
The size (width) of each pixel (dot) may also have a small effect.
Subliminal messages (images) can be introduced in a single frame. These
are sometimes called "Easter Eggs" and can be discovered using "freeze
frame" procedures.
Exercise 2024.07.02
Modify the Pwait.py program so that the letter "_" (underscore) moves 1
character to the right in each subsequent "frame". When doing this,
do not display L, which is the loop (or frame) counter. When the interval
between frames is very small (under .1 sec) the movement should seem
continuous.
Day 2024.08
Today we will introduce global variables, hex-dumps, zip files and the programming language called "mathematica" or "m".
In most programming languages, variables defined and/or used within a function are distinct from the variables in other functions or in the main program. Consider the case of a variable named "fStr" is assigned the value of "ghi" in the main program. If "fStr" is passed in the parameter list to a function, it can be referenced in the function, perhaps being printed out by
print("fStr:",fStr)
This only works if the variable "fStr" is passed to the function as a parameter AND if the parameter is defined as "fStr" as an incoming parameter. If "fStr" is not defined as an incoming parameter, the print statement will fail. However, it is possible for a variable in a main program to be made available to functions that it calls without passing it as a parameter. To do this, "fStr" must be defined as "global" in BOTH the main program and in the function that is called. This concept of "global" is now found in most programming languages. In the FORTRAN language, global variables were called "COMMON" variables and were defined using the statement "COMMON fStr".
One of the most basic ways to view the exact contents of a disk file is a hexadecimal dump of the file. To view a hex-dump in a Linux terminal window just type "hd" followed by the file name. A simple text file, named abc.txt, that contains the characters "abc" will appear as shown below:
>hd abc.txt
00000000 61 62 63 0a 0a |abc..|
00000005
>
On the left is the address of each character in the hexadecimal dump, the first byte is at address 0. Following the address is the actual hexadecinal dump. The ascii character "a" is 0x61 in hexadecimal. The first three characters in the file are followed by two line feed characters. Each line feed is "\n" (the Python character sequence for "New Line" which is 0x0a in hexadecimal). Two line feed characters are used in Linux because Windows uses Carriage Return followed by Line Feed [New Line] (which is 0x0d0a in hexadecimal) to indicate the end of a file. Two "New Line" characters are used in Linux so that the number of characters in a file are the same regardless of it being a Linux or a Windows file. The Carriage Return and New Line characters were used on the first printers (teletypes) to cause the carriage (containing the print head) to return to the left of the page, ready to print the next character. The New Line advanced the paper so that the New Line (next line) would begin printing below the previous line.
In the hex-dump shown above, to the far right, the actual ascii characters appear. Any control characters are shown as "." The end of the file is shown by the address of the next character (if it would have existed) followed by an empty line. Therefore the last line of the hex-dump is the length of the file (in bytes). Any disk file can be listed in a hex-dump. Each line of the hex-dump lists, at most, 16 bytes of the file.
The hex-dump program can be used to view the contents of any file. Most programs and data files contain non-random bytes. Therefore most disk files can be reduced in size by algorithms that shrink sequences of duplicate characters. This process is called zipping a file. ExpressZip is such a program that is free for non-commercial users.
On one of my flash drives named Fla21D16G, there is a small folder named Notes. I copied this folder as is into a folder called Notes in this article on the web server currently being read (by you). But web readers are not permitted to access such folders, without permission. So I used the free ExpressZip program to zip the contents of this folder into a zip file called Notes.zip, which can be found in Source 52. This zip file can easily be downloaded to a Raspberry Pi computer. It can then be unzipped. Each Raspberry system can automatically zip or unzip such zip files.
There are many good reasons why a backup should be done using a zip method (instead of a simple copy of the file). Some reasons are described below.
The resulting backup zip file:
- takes up less space because a zip file is compressed
- is simple to move because the folder structure is "hidden" in the zip file
- is secure because an optional password can be used to encode all the data
- contairs all the unchanged original file names and folder names
- does not retain intermediate data between backup sessions
- can be attached to an email (as a single file), only requiring space
off-site on the email server
- does not result in file names being listed during a file-name search
(which either provides better or worse results !)
A directory listing of the Notes folder (as on Fla21D16G) is shown below:
(To enlarge .....Click it)
Fla21_Notes.jpg
A listing of the contents of the Notes.zip file should be similar to the above.
Within Notes.zip, one of the files should be named m_NotesA.txt. In case your unzip doesn't work properly, a copy of m_NotesA.txt can be found in Source 53.
The name of this text file describes the file as being some code written in the "m" language more properly named mathematica. The programming language "m" was invented by Stephen Wolfram many years ago. He has grown a huge company around this language. More is said in my Article 75. Wolfram always charges for the use of "m", with one notable exception, on Raspberry Pi computers. Yes, spending $35 for a Pi also permits the owner to use "m".
Programs written in "m" are self-documenting, the coder is invited (actually expected) to provide copious comments enclosed within pairs of "(*" and "*)". The commented date shown in the m_NotesA.txt program is
2015 C Mar 21. Article 57 is a brief introduction to "m". Article 75 describes in more detail many of the peculiar aspects of "m" that distinguish it from other programming languages. Each code statement is usually immediately executed, much like each Linux command is immediately executed within the Terminal window. Every code statement causes a function to be run (or a variable to be assigned a value) or both. Reading through well-documented "m" code can be like a narrated journey.
The m_NotesA.txt program, in "m" code, was created to introduce a beginner to some of the concepts comprising "m". It is valid "m" code and can be run as-is, directly by mathematica. No more explanation is necessary, but be prepared for many new original programming ideas. However beware, compared to "m", Python is a very easy language to master. I encourage a beginning programmer to become quite well-versed in Python before tackling "m". My introduction to "m" was back in 2015, and I remember my struggles . . . . and the "awe". I quickly understood why Wolfram was able to make a fortune by creating a company fully based on "m" . A third mathematica article (number 74) is a list of "Mathematica Tips and Traps". These 3 articles were written 9 years ago (in 2015) so I must apologize for the many web link failures. Enjoy!
To install mathematica on any Raspberry Pi, just google it. The process is simple, but time-consuming. Back in 2015, mathematica came already installed on most Raspberry Pi computers.
Twelve more simple examples of "m" code can be found in "WolframsEgs.txt" in article 52. Wolfram in mentioned in many of my articles. See the complete list by doing a "freefind" search for "Wolfram" at the top of my main "Articles by Old King Cole" webpage.
The mathematica programming language does NOT use global variables. In fact, in mathematica, all variables are global variables. An variable assigned a value anywhere in mathematica is usable throughout the whole mathematica program. In most programming lanuages, all variables are not defined a value when the program starts running. In mathematica, when a program is loaded, the value of each variable is assigned the value that it had when the program was previously run. In mathematica, a statement exists to reset all variables to not be defined. In most programming languages, at the beginning of the program, the statement
"y=x*x - 5*x + 6"
results in an error message saying that the variable "x" is undefined. But the mathematica programming language understands the mathematical concept that "y" is a function of the variable "x" if "x" is undefined. However in mathematica, the following 2 statements
x=1
y=x*x - 5*x + 6
result in assigning the value of 2 to y, as in other programming languages. But the following mathematica statements might surprise non-mathematica programmers:
y=x*x - 5*x + 6
y=0
result = {x} / .Solve[{x*x - 5* x + 6},{x}]
print[N[result]]
or
Remove[Global`*];
Solve[{x*x - 5*x + 6},x]
The result printed will be "x = 2, x = 3" which are the two values of x that satisfy the mathematical equation "0 = x*x - 5*x +6". The exact syntax of these above mathematica statements is certainly not perfect, but the main functionality is correctly implied. In the near future, the author hopes to install mathematica on a Raspberry Pi to determine the correct syntax.
Day 2024.09
Today's class is about Python Collections. See Source 56 for the class notes and Exercises.
The following serial file is an example of a comma-delimited serial file, with a numeric key and one data field. It should be stored on disk using the name SerialFile.txt. It contains some data errors.
00000,Cole
00003,Marcoux
00006,Dufour
00008,Johnson
00005,Anderson
0A000,Bad Digit in Key
00025,
00030,Xray
00099,SerialFile.txt
(To enlarge .....Click it)
Python Data Types
Day 2024.10
Today's class is a series of short Python exercises. They are listed in Source 57. Source 57 also includes the source where these exercises appear on the web. Some of these exercises have been altered, so their source does not always provide the correct code.
End of Course Day Outlines
Raspberry Pi Zero-2-W
(To enlarge .....Click it)
Raspberry Pi Zero-2-W
USB PWR IN
Be sure to connect the PWR IN cable
into the connector closest to the corner
of the Pi Zero 2 W
Shown above, the new Raspberry Pi Zero 2 W (built around the 64-bit RP3A0 IC), released in 2021 (costing US$ 15.00), is 5 times as powerful as the original Pi Zero and has 512MB SDRAM. It supports 2.4GHz WiFi, BlueTooth 4.2 and BLE. See Source 25 for more product information and Source 26 for a product-brief-pdf describing the Raspberry Pi Zero-2-W. Source 27 provides more detailled Pi Zero 2 W schematics and board information. See Article 167 (Source 29) for a visual comparison of the original Pi Zero, the Pi Zero W and the Pi Zero-2-W (Pi Zero2W).
See Source 29 for various images contrasting the 3 different models of the Raspberry Pi Zero. Source 29 also lists many of the WebMaster's
different flash drives and devices. It also describes different methods of loading a Raspberry Pi Linux operating system onto a microSD card. Note that none of Pi Zero boards are sold with soldered male headers. The all just have plated-through holes as shown in the above image.
Recommended "Onboard" keyboard for the Raspberry Pi
The models of the Raspberry Pi Zero have only one USB port. A mouse is absolutely necessary to control a Raspberry Pi and a mouse usually needs to be attached
using a USB port. Attaching a keyboard often needs a second USB port or a USB expansion hub. The Onboard keyboard provides the user with an on-screen
keyboard meaning that a Pi Zero can be controlled using only 1 USB connector and no USB hub.
No instructions are necessary to install the free Onboard keyboard (shown below). Merely install it like any other software for the Raspberry Pi. This keyboard works immediately after being installed. It can be resized and repositioned on the
Raspberry Pi Desktop. It provides many control features, notably "Snippets" which permit phrases or macros to be stored "in the keyboard" and "easily typed"
The Onboard software functions very well under the "BullsEye" version of the Raspberry Pi Operating System. Hopefully Onboard will be easily usable on the Raspberry Pi Zero 2W computer.
The author encountered many issues when he recently tried to install MatchBox-keyboard. All issues disappeared once Onboard was installed.
The author does not recommend the use of the Matchbox-keyboard software on the Raspberry Pi
(To enlarge .....Click it)
Onboard keyboard on BullsEye OS
Notes about Onboard Keyboard on the Raspberry Pi
Of the many versions of Onboard available for the Raspberry Pi, I installed onboard-1.4.1-5+b3 (64 bit) on 2023HAug27.
To invoke Onboard, click on "Universal Access" in the Accessories submenu
Some characters are not in the expected positions (compared to the Raspberry Pi keyboards):
The "\" is to the left of the "Enter" key
The "|" is "shift-\"
The "<" appears to the left of the "z" key and elsewhere on other layouts
Feature: "Alt-Gr-F dhighlighted the Subfile "F" menu (like "ctrl-f") in the Raspberry Pi text editor.
Feature: A tiny "mobile" keyboard layout is available for tiny displays.
Feature: Click on the three horizontal bars (bottom right corner) to access the Snippets.
Feature[?]: My Snippets were not lost when I uninstalled and re-installed Onboard.
Feature: Clicking on the "X" in the top right corner toggles Onboard from the display.
Feature: Snippets can be viewed and deleted using the "Tools" button
But any snippet text defined using "Tools" are not retained; they must be re-entered.
Onboard Source, Author & Interactions
The author of this website has discovered in the Raspberry Pi "/usr/share/onboard/tools" folder, some python-3 source code named "checkmodels" originally written by marmuta in 2014. It might of some interest to readers that part of Onboard was written in Python. See Source 35 to review or interact with the authors of Onboard.
Onboard Linux Manual and Issues
A comprehensive manual describing Onboard has not been found. Source 34 contains little more than what is in the existing linux manual. On the Raspberry Pi, the Onboard linux manual can be viewed in the Terminal using the following command:
>$ man 1 onboard
The author has discovered an example of a configuration (control) file for Onboard. It can be unzipped using "Archiver" from "/usr/share/doc/onboard/onboard-defaults.conf.example.gz".
As of 2023HAug28, the existing Onboard issues on the Raspberry Pi under Bullseye OS are:
Issue 1 Typing Assistance didn't work on BullsEye on the Raspberry Pi in 2023HAug.
CAVEAT: Notes said that GNOME was a prerequisite
Issue 2 Turning ON "Typing Assistance" caused Onboard to Hang and NOT reload, even after uninstalling & rebooting.
FIX: Right-Click on Universal Access-Onboard, then click Properties, then turn OFF "Typing Assistance"
Issue 3 Snippets cannot be added using the "Tools" button (ADD field is inoperative)
WORK-AROUND: Add the snippet again using the Snippet button
Issue 4 Onboard Help is not available (GUI)
WORK-AROUND: See the CLi Onboard Help file in Source 33 or the Onboard linux manual, then load it and view it as a Snippet.
Bash Commands as Onboard Keyboard Snippets
Simply terminate the command in the snippet with a space, a backslash and the letter n. (Exclude the ">$ ".) For example:
>$ ls \n
This above Snippet will "tell" the active Terminal window to list the contents of the working directory. Multiple bash commands can even be stored in one Snippet. An extra space should follow each " \n" for better readability.
Of course, a Raspberry Pi Terminal window needs to be open and active for this to function correctly. This is a novel alternative to using bash batch shell files.
Handling of Control Files during Software Installs & Uninstalls
MAJOR ISSUE
User-configurable control files should be resettable by the user when software
is installed or uninstalled. The author has had numerous difficulties when trying to re-install software packages "from scratch".
The cause has been that some control files (or user data) has not been re-initialized when being installed. Sometimes, a user wishes to keep (i.e. not lose) valuable user data (or data embedded in control files). But sometimes, keeping user data or a control file causes the re-install of the software to function incorrectly. This occured in Issue 1 above for the Onboard keyboard.
For example, I considered trying to use the "Typing Assistance" option in the Onboard keyboard. I noted that it mentions that GNOME software
was a prerequisite in Linux. I was not certain if GNOME software was installed on the Raspberry Pi, but I turned on "Typing Assistance", keeping in mind that this might cause me a problem. Well. . . . it did. . . . cause me a problem.
However, I was surprised that, due to this, the Onboard keyboard refused to start up and provided no error message. I tried uninstalling and
re-installing Onboard, to no avail. I didn't want to create a new microSD card and reload everything, but I
was beginning to run out of options. Finally I did a right-mouse-click on the Onboard button, saw a "Properties"
button appear, clicked on it and turned off "Typing Assistance". Problem solved. If only . . . . the installer would have
given me the option to remove all user and/or control data related to the Onboard software. Perhaps this option would
rarely be used, but it would have given me another option to try before "starting all over again" by creating
a new microSD card.
Related Thoughts
As of 2023GJul24, the webmaster has done an inventory of all the devices that he has recently received. Mainly they are grouped by their common order numbers, although some have been loaded into plastic boxes separated into compartments. A detailed inventory list of these devices is available as Web Source 11 named "IX Device Inventory at 621ON". It also lists the contents of 10 compartmentalized plastic boxes of electronic components. Older inventory such as cabinets with drawers full of transistors, condensors, diodes, LEDs and resistors has not been documented.
Source 18 describes how the tiny ESP-01 WiFi board permits the Cytron Maker Pi Pico board to commmunicate using WiFi. Source 16 shows how to use the LM386 Audio Amplifier in a simple circuit. Source 17 is a DataSheet for the LM386 Audio Amplifier. Both the ESP-01 and the LM386 can be found in inventory in Source 11.
SwitchDoc Labs is closing its doors in July 2023. Thankfully, Shawn Rice has archived much of the documentation of its product in Source 19.
Source 30 is a link to a recent MagPi magazine article on page 77. The article is entitled "Learn Python With Raspberry Pi: Beginner's Guide 4th Edition" by Gareth Halfacre. He recommends 3 websites for you to bookmark. It is possible to download all issues of the MagPi magazine. Contact the website author (D@CC) if you wish a copy of many of these MagPi issues delivered on a FlashDrive. The cheatsheet at Source 31 will be of special interest to those beginning to learn Python.
I extend my thanks to the owner of " freefind " for weekly updates of the "searchable index" of all my Articles.
As of 2023HAug22, ZDNet has announced that Python and ChatGPT will soon be available to users of MicroSoft Excel.
Sources 36 and 37 provide, for the Raspberry Pi, a list of Terminal commands and a glossary of terms respectively.
Source 39 describes how to use Bluetooth (without pairing) on the Pico W. An example shows how to send the temperature of the Pico W processor to a nearby computer. Two samples of code are provided (for each end of the transmission). The Python code is quite complex. This code uses little-endian 2-byte signed integers.
On Aug 03 2024, WaveShare announced a US$32.99 UPS Power Hat (E) for Raspberry Pi 5B, 4B and 3B+ computers (but not the Pi-400). See Source 53 for more detailled information. This Hat board can also provide power to external devices via an on-board USB-A connector. It uses 4 Lithium 21700 batteries as the power source to provide uninterruptible power for one of these Raspberry Pi computers. The UPS HAT (E) is attached below the Raspberry Pi board but is still called a "Hat". It includes a battery fuel gauge IC for monitoring voltage, current, and capacity via an I2C connection. As shown below, this blue Hat board sits atop a box that houses the 4 Lithium batteries (not included). The protected Raspberry Pi board is mounted above the UPS Power Hat E.
It uses a 2x pogo pin to power the Raspberry Pi. The USB-C connector can be used as input or output. When external power loss occurs, this Hat automatically switches from the normal USB-C power to begin making use of the Lithium Batteries. When power resumes, the UPS Hat board recharges the Lithium Batteries. It can charge batteries and provide power output at the same time. The UPS HAT (E) is an improvement of a previously released UPS HAT by WaveShare.
(To enlarge .....Click it)
WaveShare UPS HAT (E) for RPi 5
This UPS Hat (E) board makes any connected Raspberry Pi impervious to short term power outages. For this reason, it is an ideal adjunct to a Raspberry Pi computer used for non-critical process control applications.
Source 53 by Raspberry.org describes the current (as of 2024HAug05) config.txt file to be used when booting all models of the Raspberry Pi.
Sources
Video Sources
Video Source V204:01: Ascii Serial Data on an Oscilloscope (0:31m) by TektronixSupport in 2022
Video Source V204:02: Raspberry Pi with KY-018 (3:13m) by Pi Club in 2016
Video Source V204:03: Raspberry Pi Pico Tips and Tricks (4:20m) by Malcolm Maclean in 2023 C Mar 00
Web Sources
Web Source S204:01:www
W3 Python Lists
W3 Python List on 2023GJul09
Web Source S204:02:www
Semiconductor Doping
By WikiBooks on 2023GJul09
Web Source S204:03:www
Semiconductor Diode Operation
By WikiBooks on 2023GJul09v
Web Source S204:04:www
Python String Methods
by W3schools.com on 2023GJul09
Web Source S204:05:www
Transistor Currents
by Physics & Radio on 2023GJul09
Web Source S204:06:www
Diodes
by electronics tutorials on 2023GJul09
Web Source S204:07:www
JSON squad example
by ckasby at github before 2023GJul09
Web Source S204:08:www
Morse Code Generator
by support@morsecodes.io on 2023GJul18
Web Source S204:09:www
A&C: PiR2Null Area Controller (153)
by D@CC on 2021BFeb08
Web Source S204:10:www
Raspberry Pi Pico Tips and Tricks (>100 p)
by Malcolm Maclean before 2023GJul24
Web Source S204:11:www IX Device Inventory at 621ON
by D@CC on 2023GJul24
Web Source S204:12:www Cytron Maker Drive Datasheet
by Cytron on 2019BFeb00
Web Source S204:13:www emailSender_py.txt
by Malcolm Maclean before 2023GJul24
Web Source S204:14: www
RPi Pico W DataSheet (25 p)
by Raspberry before 2023FJun14
Web Source S204:15: www
nxp 74hct9046a VCOsc Datasheet
by Cytron/Mouser / NXP 2009ISep 15
Web Source S204:16: www
LM386 Audio Amp Circuit
by Circuits DIY on 2020 A Jan 22
Web Source S204:17: www
LM386 Audio Amp DataSheet
by ti on 2020 A Jan 22
Web Source S204:18: www
ESP-01 (Using the ESP8266 Module)
by Propellerpowered before 2017 E May 00
Web Source S204:19: www
SwitchDoc Labs Product Pages and Documentation Archive
by SwitchDoc Labs on 2023 G Jul 26
Web Source S204:20: www
sortF.py as txt
by D@CC on 2023HAug01
Web Source S204:21: www
sortFquik.py as txt
by D@CC on 2023HAug01
Web Source S204:22: www
The Linux Programming Interface
by Michael Kerrisk on 2010JOct00
Web Source S204:23: www
SORT OPTIONS from The Linux Programming Interface
by Michael Kerrisk on 2010JOct00
Web Source S204:24: www
Raspberry Pi OS Documentation
by Raspberry Pi Foundation in 2022
Web Source S204:25: www
Raspberry Pi Zero 2 W Specs
by Raspberry Pi Foundation in 2021
Web Source S204:26: www
Raspberry Pi Zero 2 W product brief (6 pp)
by Raspberry Pi Foundation in Oct 2021
Web Source S204:27: www
Raspberry Pi Zero 2 W schematics and board specifications
by Raspberry Pi Foundation in Oct 2021
Web Source S204:28: www
Pi: Useful Raspberry Pi Device Family Terminal Commands (170.html)
by D@CC on 2022 B Feb 25
Web Source S204:29: www
IT: Flash Drive & Device Library (167.html)
by D@CC on 2014 G Jul 29
Web Source S204:30: www
Pi: MagPi Magazine Issue 132 by Raspberry Pi on 2023 H Aug 21
Web Source S204:31: www
IT: Python cheatsheet by QuickRef.ME before 2023 H Aug 21
Web Source S204:32: www
Pi: lowest.py (stored as *.txt) by D@CC on 2023 H Aug 22
Web Source S204:33: www
Onboard Help (CLI) by Onboard on 2023 H Aug 27
Web Source S204:34: www
Onboard Linux Manual by Mike Gabriel at SysTutorials before 2023 H Aug 27
Web Source S204:35: www
Launchpad.net Onboard Website by Onboard as of 2023 H Aug 27
Web Source S204:36: www
Raspberry Pi Commands by Rpi as of 2023 H Aug 27
Web Source S204:37: www
Raspberry Pi Glossary by RPi as of 2023 H Aug 27
Web Source S204:38: www
10 Python Programs to Write by programiz.com as of 2023 H Aug 29
Web Source S204:39: www
Bluetooth on Pico W by Ben Everard as of 2023 H Aug 24
Web Source S204:40: www
Bluetooth on Pico W by Ben Everard as of 2023 H Aug 24
Web Source S204:41: www
Python Basic Exercise for Beginners by PYnative as of 2023 H Aug 31
Web Source S204:42: www
SQL User Data Structure by D@CC on 2024 E May 28
Web Source S204:43: www
SQL User Data Edit by D@CC on 2024 E May 28
Web Source S204:44: www
Customer Address DB (pdf) by D@CC on 2024 E May 28
Web Source S204:45: www
Hill.txt (text) by D@CC on 2024 E May 28
Web Source S204:46: www
w3 Matrices by D@CC on 2024 E May 28
Web Source S204:47: www
How to use a SSD by D@CC on 2024 B Feb 06
Web Source S204:48: www
RPi_Boot-from-usb.txt by D@CC on 2024 F Jun 13
Web Source S204:49: www
SQL Examples by D@CC on 2024 F Jun 25
Web Source S204:50: www
Try . . Except by D@CC on 2024 F Jun 25
Web Source S204:51: www
Pwait.py (www is not txt format) by D@CC on 2024 G Jul 23
Web Source S204:52: www
Notes.zip (www is the same file) by D@CC on 2015 D Apr 01
Web Source S204:53: www
m_NotesA.txt (www is txt format) by D@CC on 2015 D Apr 01
Web Source S204:54: www
WaveShare UPS Hat 3 For RPi 5,4,3B by Sayantan Nandy as of 2024 H Aug 04
Web Source S204:55: www
RPi config.txt Usage (for all RPi models) by Raspberry Pi as of 2024 H Aug 05
Web Source S204:56: www
Python_Collections.txt by D@CC on 2023 H Aug 20
Web Source S204:57: www
Exercises 2024ISep03(text) by D@CC on 2023 I Sep 03
/SourcesEnd
There is a way to "google" any of the part-numbers, words and phrases in all my articles. This "google-like" search limits itself ONLY to my articles. Just go to the top of "ePC Articles by Old King Cole" and look for the "search" input box named "freefind".
Date Written : 2023 F Jun 12
Last Updated : 2023 I Sep 03
All rights reserved 2024 by © ICH180RR
saved in E:\E\2022\DevE\MyPagesE\Globat\ePhotoCaption.com\a\204\204.html
backed up to ePhotoCaption.com\a\204\204_2023GJul26.html
Font: Courier New 10 (monospaced)
/204.html