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)
thumb: IXimage.jpg
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

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)
thumb: PeriodicTable.jpg
Periodic Table


(To enlarge .....Click it)
thumb: LED.jpg
LED (flat [short leg]: ground)


(To enlarge .....Click it)
thumb: Diode_Depletion_Regions.jpg
Diode Depletion Regions


(To enlarge .....Click it)
thumb: DiodeCurve.jpg
Diode Curve


(To enlarge .....Click it)
thumb: E=IR.jpg
Image 03 E = I * R


(To enlarge .....Click it)
thumb: NPN.jpg
NPN


(To enlarge .....Click it)
thumb: NPN_depletion_regions.jpg
NPN depletion regions


(To enlarge .....Click it)
thumb: Transistor_Currents.jpg
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)
thumb: FeynmanDiagram.jpg
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)
thumb: AsciiData.jpg
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)
thumb: LED2.jpg
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)
thumb: CDS_cell.jpg
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)
thumb: http://ephotocaption.com/a/153/KY-18_Schematic.jpg
Inverted ambLight/digLight sensor (KY-018 Schematic)


(To enlarge .....Click it)
thumb: IMG_5349B.jpg
: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)
thumb: IMG_5350.jpg
: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)
thumb: DupontConnectors.jpg
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)
thumb: pull-resistorsOK.jpg
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:

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)
thumb: Exercise56B.jpg
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)
			
			
thumb: Eye_Of_Africa.jpg
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)
thumb: CastellatedNut.jpg
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:
A directory listing of the Notes folder (as on Fla21D16G) is shown below:

(To enlarge .....Click it)
thumb: Fla21_Notes.jpg
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)
thumb: PythonDataTypes.jpg
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)
thumb: Pi-Zero-2-W.jpg
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)
thumb: IMG_5478.jpg
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)
thumb: UPS_for_RPi_5.jpg
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".

Click here to return to Articles by Old King Cole

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