# Getting started with IoT devices
###### tags: `Tools` `Labs` `basica`
:::info
Code referenced in this doc can be found here: [https://github.com/pmanzoni/hackmd_code](https://github.com/pmanzoni/hackmd_code)
:::
The HW we use is based on a [LoPy4](https://pycom.io/product/lopy4/) with a [PySense](https://pycom.io/product/pysense/) board.
![](https://i.imgur.com/vSrQQ7f.jpg =x400)
LoPys are based on [MicroPython](https://micropython.org/). MicroPython is a full Python compiler and runtime that runs on the bare-metal. You get an interactive prompt, called the REPL ("Read Evaluate Print Loop"), to execute commands immediately, along with the ability to run and import scripts from the built-in filesystem. The REPL has history, tab completion, auto-indent and paste mode.
More infos about REPL can be found here: https://docs.pycom.io/pymakr/toolsfeatures/
To connect to the LoPy's REPL you will use a Python tool called **[mpy-repl-tool](https://mpy-repl-tool.readthedocs.io/en/latest/)**. You will learn how to use it in this section.
==Now, plug-in your LoPy device in a USB port and wait a few seconds until the LED starts blinking in blue. Before, you'll probably be asked whether you want to use the device in the VM==
![](https://i.imgur.com/CIKBNVH.jpg =x400)
Then execute:
```
python3 -m there detect
```
This command will list the serial ports and "hopefully" :smiley: will automatically find your LoPy board. If everything is fine you should see something like:
```
/dev/ttyACM0 - Pysense - Pysense
```
To get access to the REPL prompt, write:
* `python3 -m there -i`
You'll get the `>>>` REPL prompt (see below). To exit from the REPL you have to type `Ctrl+]`
![](https://i.imgur.com/CEq8z05.png)
### The basic commands:
These are the basic commands that you will have to use:
* getting a list of the files on the LoPy:
```
$ python3 -m there ls -l /flash/*
---------- 0 0 34B 1980-01-01 01:09:16 /flash/main.py
---------- 0 0 29B 1980-01-01 01:09:18 /flash/boot.py
```
:::info
The filesystem has ``/`` as the root directory and the available physical drives are accessible from here. They are:
* `/flash`: the internal flash filesystem
* `/sd`: the SD card (if it is inserted, obviously)
:::
* coping file `_filename_` from your computer to the LoPy:
```python3 -m there push _filename_ /flash```
* wildcards can be used to copy multiple files from your computer to the LoPy. For example:
```python3 -m there push *.py /flash```
* reading the contents of file `_filename_` on the LoPy:
```python3 -m there cat /flash/_filename_```
* removing file `_filename_` on the LoPy:
```python3 -m there rm /flash/_filename_```
wildcards can be used to delete multiple files.
A detailed list of commands can be found here: [mpy-repl-tool.readthedocs](http://mpy-repl-tool.readthedocs.io/en/latest/commandline.html)
:::info
BTW; it can be useful to create the alias:
`$ alias pyt="python3 -m there"`
so not to type too much :smile:
:::
### Typical Lopy device workflow
A typical workflow is the following:
1. Write the micropython code in your computer
1. Copy the code file or files from your computer to the LoPy, e.g.,:
```$ python3 -m there push *.py /flash```
1. Start a serial terminal and get access to the REPL:
```$ python3 -m there -i```
1. Execute the code in file `_filename_.py` on the LoPy, with:
* `>>> import _filename_`
### Accessing the sensors of the Pysense board
The PySense offers various embedded sensors, namely:
* Ambient light sensor
* Barometric pressure sensor
* Temperature sensor
* Humidity sensor
* 3 axis 12-bit accelerometer
Take a look at the code in file `"reads.py"` to understand how to use them. As you can see, various python libraries are necessary, they are all in the `lib` folder. To copy the whole `lib` folder to your LoPy, you have to execute:
```python3 -m there push -r lib/* /flash/lib```
## Appendix
LoPy's documentation is here: https://docs.pycom.io/index.html
### Problem "pushing" a file to the LoPy
Sometime you get an error message when "push"ing a file to the LoPy, something like this:
```
$ python3 -m there push led_blink.py /flash
ERROR: action or command failed: execution failed: : Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: _h
```
the solution is to use the **`--force`** option. That is:
```
$ python3 -m there push --force led_blink.py /flash
```
### Resetting the LoPy
They are different ways to reset your device. Pycom devices support both soft and hard resets.
A **soft reset** clears the state of the MicroPython virtual machine but leaves hardware peripherals unaffected. To do a soft reset, press `Ctrl+D` while in the REPL.
A **hard reset** is the same as performing a power cycle to the device. In order to hard reset the device, press the reset switch or run:
```python
>>> import machine
>>> machine.reset()
```