%%%%%%Julia descrition starts \section{Julia} \label{sec:julia-start} Julia is a high-level, high-performance dynamic programming language for technical computing, with a syntax familiar to users of other technical computing environments \cite{julia-ref}. While it is a general-purpose language and can be used to write any application, many of its features are well suited for numerical analysis and computational science. Julia provides a sophisticated compiler, distributed parallel execution, numerical accuracy, and an extensive mathematical function library. % This is a set of tools that provide functionality in Julia, to program the \arduino. \subsection{Downloading and installing on Windows} \label{julia-install-windows} This book uses Julia 1.6.0 for demonstrating the experiments, both on Windows and Linux. Julia does not use indentation to indicate a block of code, unlike Python. However, the users are advised to install a programmer text editor like Atom. This editor will allow the readers to modify the Julia source files on their machines if they want to. Alternatively, one can also use Notepad (on Windows) or gedit (on Linux Ubuntu) to edit Julia source files. Starting from download, we shall go through the steps to set up Julia 1.6.0 on Windows OS: \begin{enumerate} \item Visit the URL {\tt https://julialang.org/}. At the top of the page, locate the Download tab and click on it. From the Current stable release, download the required Julia binaries (32 or 64-bit) for Windows, as shown in \figref{julia-download}. At the time of writing this book, the Current stable release refers to Julia 1.6.0, as shown in \figref{julia-download}. In this book, we will perform experiments with a 64-bit installation of Julia 1.6.0. \item Locate the executable file. Right-click on it and hit Run as administrator to begin the installation. After selecting the Installation Directory, a window named Select Additional Tasks appears as shown in \figref{julia-windows-install}. In this window, check the box which says, Add Julia to PATH and click on Next to continue the installation. \end{enumerate} \begin{figure} \centering \includegraphics[width=\textwidth]{\LocSWfig/julia-download.png} \caption{Julia's website to download 64-bit Windows/Linux binaries} \label{julia-download} \end{figure} \begin{figure} \centering \includegraphics[width=\lgfig]{\LocSWfig/julia-windows-install.png} \caption{Installing Julia 1.6.0 on Windows} \label{julia-windows-install} \end{figure} \begin{figure} \centering \includegraphics[width=\lgfig]{\LocSWfig/windows-cmd.png} \caption{Launching the Command Prompt on Windows} \label{windows-run-julia} \end{figure} \begin{figure} \centering \includegraphics[width=\hgfig]{\LocSWfig/win-command-prompt.png} \caption{Command Prompt on Windows} \label{windows-cmd-julia} \end{figure} Once the installation is finished, Julia 1.6.0 App can be launched either from the Start menu or from the Command Prompt. In this book, we will use the Command Prompt to execute the Julia source files. Please note that a Julia source file has .jl as its extension. Carry out the steps given below to execute a Julia source file from the Command Prompt: \begin{enumerate} \item Launch the Command Prompt. Press the Windows key+R together. A window, as shown in \figref{windows-run-julia} appears. In the text box adjacent to Open, type {\tt cmd}, and press Enter. The Command Prompt, as shown in \figref{windows-cmd-julia} appears. By default, it points to the home directory. \item Now, we will check whether Julia 1.6.0 was installed successfully or not. In the Command Prompt, type {\tt julia -{}-version} and press Enter. If this step displays julia version 1.6.0 in the following line, the installation was successful. \item Using the {\tt cd} command, navigate to the directory where your Julia source file is located. Assuming that your Command Prompt points to the home directory, and you want to navigate to the folder Origin on Desktop, execute the following command: {\tt cd Desktop\textbackslash Origin} \\ It may be noted that a backslash (\textbackslash) has been used between Desktop and Origin. \item To view the contents of this folder, type {\tt dir} and press Enter. \item Suppose you have a Julia source file named {\tt FILENAME.jl} in this folder. To execute this script, type {\tt julia FILENAME.jl} and press Enter. The required output will be displayed in the Command Prompt itself. We don't expect the readers to run the command {\tt julia FILENAME.jl} at this instant. This command will be helpful while running the Julia source files in the upcoming sections and chapters. \item To exit the Command Prompt, type {\tt exit} and press Enter. \end{enumerate} Apart from Julia, we need to install the SerialPorts \cite{julia-serial-ports} package in Julia. This package will be required to establish serial communication with Arduino boards. Please make sure that you are connected to the Internet. To install the package, we will use {\tt Pkg}. It is Julia's built-in package manager and handles operations such as installing, updating and removing packages in Julia. To install the SerialPorts package, carry out the steps given below: \begin{enumerate} \item Launch the Command Prompt, as shown in \figref{windows-run-julia}. \item In the Command Prompt, type {\tt julia} and press Enter. It should launch Julia in an interactive session (also known as a read-eval-print loop or "REPL"), as shown in \figref{julia-repl-windows}. When run in interactive mode, Julia displays a banner and prompts the user for input. By default, Julia REPL appears in Julian prompt. It is the default mode of operation; each new line initially starts with {\tt julia>}, as shown in \figref{julia-repl-windows}. It is here that you can enter Julia expressions. Hitting return or Enter after a complete expression has been entered will evaluate the entry and show the result of the last expression. \begin{figure} \centering \includegraphics[width=\textwidth]{\LocSWfig/julia-repl-windows.png} \caption{Windows command prompt to launch Julia REPL} \label{julia-repl-windows} \end{figure} \item Now, we need to enter the {\tt Pkg} REPL in Julia. From the Julia REPL, press {\tt ]} to enter the {\tt Pkg} REPL. The moment you press {\tt ]}, you enter {\tt Pkg} REPL, as shown in \figref{julia-pkg-windows}. \begin{figure} \centering \includegraphics[width=\textwidth]{\LocSWfig/julia-pkg-windows.png} \caption{Windows command prompt to enter Pkg REPL in Julia} \label{julia-pkg-windows} \end{figure} \item In {\tt Pkg} REPL, type {\tt add SerialPorts} and press Enter. It might take a few seconds/minutes to get this package installed. Once it is installed, {\tt Pkg} REPL should show a message, like "3 dependencies successfully precompiled in 9 seconds (4 already precompiled)." \end{enumerate} We can also check the status of this package to verify whether it has been installed successfully or not. For this, we need to get back to Julia REPL. Inside {\tt Pkg} REPL, press backspace. The moment you press backspace, you get back to Julia REPL, as shown in \figref{julia-repl-windows}. Now, type {\tt using Pkg} and press Enter. This command will not generate any output. Now type {\tt Pkg.status()} and press Enter. It should display the list of packages installed in Julia's environment. Please make sure that SerialPorts is present in the list of packages being shown. To exit the interactive session, type CTRL+D or type {\tt exit()}. \subsection{Downloading and installing GNU/Linux Ubuntu} \label{julia-install-linux} We will now explain the installation of Julia on the GNU/Linux operating system. We shall perform the installation on the 64-bit Ubuntu 18.04 LTS operating system. These instructions will work for other GNU distributions, too, with little or no modification. This book uses Julia 1.6.0. To install it, carry out the steps given below: \begin{enumerate} \item First, update your system. Open the Terminal. Type {\tt sudo apt-get update} and press Enter. \item Find out your operating system support for 64-bit instructions. Open the Terminal. Type {\tt uname -m} and press Enter. If it returns ``x86\_64'', then your computer has 64-bit operating system. \item Visit the URL {\tt https://julialang.org/}. At the top of the page, locate the Download tab and click on it. From the Current stable release, download the required Linux binaries (32 or 64-bit) for Generic Linux on x86, as shown in \figref{julia-download}. At the time of writing this book, the Current stable release refers to Julia 1.6.0, as shown in \figref{julia-download}. In this book, we will perform experiments with a 64-bit installation of Julia v1.6.0. \item Locate the executable (tar.gz) file. Assuming that you have downloaded the tar file in {\tt Downloads} directory, perform the following steps on the Terminal: \begin{quote} {\tt cd {\large\textasciitilde}/Downloads\\ tar -xvzf julia-1.6.0-linux-x86\_64.tar.gz\\ sudo cp -r julia-1.6.0 /opt/} \end{quote} \item Finally, create a symbolic link to {\tt julia} inside the {\tt /usr/local/bin} folder. In the same Terminal session from the previous step, issue the following command: \\ {\tt sudo ln -s /opt/julia-1.6.0/bin/julia /usr/local/bin/julia} \end{enumerate} Julia is now installed and can be invoked from the Terminal. There are two modes in which Julia source files can be executed: Interactive mode and Non-interactive mode. In this book, we will execute source files in the latter mode i.e., from the Terminal. The readers are encouraged to explore the former mode on their own. Please note that a Julia source file has .jl as its extension. Carry out the steps given below to execute a Julia source file from the Terminal: \begin{enumerate} \item Open a Terminal by pressing Ctrl+Alt+T keys together. \item Now, we will check whether Julia 1.6.0 was installed successfully or not. In the Terminal, type {\tt julia -{}-version} and press Enter. If this step displays {\tt julia version 1.6.0} in the following line, the installation was successful. \item Using the {\tt cd} command, navigate to the directory where your Julia source file is located. Assuming that your Terminal points to the home directory, and you want to navigate to the folder Origin on Desktop, execute the following command: {\tt cd Desktop/Origin/} \item Suppose you have a Julia source file named {\tt FILENAME.jl} in this folder. To execute this script, type {\tt julia FILENAME.jl} and press Enter. The required output will be displayed in the Terminal itself. We don't expect the readers to run the command {\tt julia FILENAME.jl} at this instant. This command will be helpful while running the Julia source files in the upcoming sections and chapters. \end{enumerate} \begin{figure} \centering \includegraphics[width=\textwidth]{\LocSWfig/julia-terminal-repl.png} \caption{Linux terminal to launch Julia REPL} \label{julia-repl} \end{figure} Now, we will install a package named SerialPorts \cite{julia-serial-ports}. This package will be required to establish serial communication with Arduino boards. Please ensure that you are connected to the Internet. To install the package, we will use {\tt Pkg}. It is Julia's built-in package manager and handles operations such as installing, updating, and removing packages in Julia. For installing LibSerialPort, carry out the steps given below: \begin{enumerate} \item Open a Terminal by pressing Ctrl+Alt+T keys together. Type {\tt julia} and press Enter. It should launch Julia in an interactive session (also known as a read-eval-print loop or "REPL"), as shown in \figref{julia-repl}. When run in interactive mode, Julia displays a banner and prompts the user for input. By default, Julia REPL appears in Julian prompt. It is the default mode of operation; each new line initially starts with {\tt julia>}, as shown in \figref{julia-repl}. It is here that you can enter Julia expressions. Hitting return or Enter after a complete expression has been entered will evaluate the entry and show the result of the last expression. \item From the Julia REPL, press {\tt ]} to enter the {\tt Pkg} REPL. The moment you press {\tt ]}, you enter {\tt Pkg} REPL, as shown in \figref{julia-pkg}. \item In {\tt Pkg} REPL, type {\tt add SerialPorts} and press Enter. It might take a few seconds to get this package installed. Once it is installed, {\tt Pkg} REPL should show a message, like "5 dependencies successfully precompiled in 12 seconds." \end{enumerate} \begin{figure} \centering \includegraphics[width=\textwidth]{\LocSWfig/julia-pkg.png} \caption{Linux terminal to enter Pkg REPL in Julia} \label{julia-pkg} \end{figure} We can also check the status of this package to verify whether it has been installed successfully or not. For this, we need to get back to Julia REPL. Inside {\tt Pkg} REPL, press backspace. The moment you press backspace, you get back to Julia REPL, as shown in \figref{julia-repl}. Now, type {\tt using Pkg} and press Enter. This command will not generate any output. Now type {\tt Pkg.status()} and press Enter. It should display the list of packages installed in Julia's environment. Please make sure that SerialPorts is present in the list of packages being shown. To exit the interactive session, type CTRL+D or type {\tt exit()}. \subsection{Julia-Arduino toolbox} \label{sec:julia-toolbox} Julia, by default, does not have the capability to connect to Arduino. All such add-on functionalities are added to Julia using toolboxes. Julia-Arduino toolbox can be found inside the {\tt Origin/tools/julia} directory, see \fnrefp{fn:file-loc}. This toolbox is compatible for both of the operating systems: Windows and Linux. The Julia source files (or codes) for various experiments mentioned throughout this book can be found in {\tt Origin/user-code} directory. The {\tt user-code} directory will have many sub-directories as per the experiments. In this book, we have created a module named "ArduinoTools" in Julia. This module is available at {\tt Origin/tools/julia}. This module makes use of the functions available in the SerialPorts package to establish serial communication with Arduino. In this module, we have added functions required to run various experiments on \arduino. Using this basic set of functions, the user can define other functions to operate upon the Arduino. % Please note that the module "ArduinoTools" and the Arduino firmware given in \ardref{ard:firmware} are required to run the experiments. Now, we will see how to import (or load) the module named "ArduinoTools.jl" inside a Julia source file to run various experiments provided in this book. In a Julia source file, add {\tt include("ArduinoTools.jl")} at the top of the file. When we add {\tt include("ArduinoTools.jl")} in a source file, the function "include" searches for "ArduinoTools.jl" only in that directory where our source file is saved. That's why all the source files in Julia must be saved in a folder that contains the file "ArduinoTools.jl." In this book, "ArduinoTools.jl" has been saved in the folder where the Julia source files for each chapter are available. For the sake of convenience, we have added {\tt include("ArduinoTools.jl")} in all the Julia source files provided in this book. To run a particular experiment, one can follow the steps as given in \secref{julia-install-windows} and \secref{julia-install-linux}. \subsection{Firmware} \lstset{style=mystyle} \label{sec:test-firmware-julia} \addtocontents{cod}{\protect\addvspace{\codclr}} We have provided a Julia source file (code) to check whether the firmware has been properly installed. That file is listed below. Please ensure that you have uploaded the FLOSS firmware given in \ardref{ard:firmware} on \arduino. \begin{juliacode} \jcaption{A Julia source file to check whether the firmware is properly installed or not}{A Julia source file (code) to check whether the firmware is properly installed or not. Available at \LocFIMjuliabrief{test\_firmware.jl}. Execute this source file by following the steps given in \secref{julia-install-windows} and \secref{julia-install-linux}. If the execution is successful, you should expect three "ok" messages. } \label{julia:test-firmware} \lstinputlisting{\LocFIMjuliacode/test_firmware.jl} \end{juliacode}