This page summarizes all you need to compile and deploy Espurna on Windows 10 with Visual Studio Code (VSCode). VSCode is a free, open source, light IDE from Microsoft.
# Install main components
## Git for Windows
Download it from https://git-scm.com/download/win (choose appropriate version).
Ensure that it modifies the path variable.
## Visual Studio Code
Download it from https://code.visualstudio.com/docs/?dv=win
Ensure that it updates the PATH variable (default option).
## Node.js and npm
Download it from https://nodejs.org/en/download/ (more convenient with the ***Windows Installer*** (.msi) version)
NPM gets installed with node.js
Restart your computer.
Launch Visual Studio Code. It should detect git (displaying a message in a git pane at the bottom of the window).
## Gulp
From VSC, open a terminal (CTRL+SHIFT+\` *OR* CTRL+SHIFT+P and search for `Terminal: Create New Integrated Terminal`) and run
```
npm install --global gulp-cli
```
# Install main extensions
From the extensions pane of Visual Studio Code install the following extensions.
Mandatory :
- Platformio IDE
Optionally :
- Python
- GitLens (to show modifications history)
# Get the code
Clone https://github.com/xoseperez/espurna.git
For example into `C:\Users\{user}\Documents\PlatformIO\Projects\xoseperez-espurna`
With VSCode, open `xoseperez-espurna\code` folder. PlatformIO IDE will start and detect platformio project.
# Build and update
Now you can build espurna, including web files, directly from Visual Studio Code.
To build / upload firmware for a specific board, use "Tasks / Run Task..." (CTRL+ALT+T by default) and search for "Build (...)" / "Upload (...)" tasks.
`PlatformIO: Build` and button on the bottom bar builds 'default' environment specified in 'code/platformio.ini' (`wemos-d1mini-relayshield` at the time of writing this)
## Environment variables for OTA uploads
OTA parameters are now picked up from environment variables.
You need to set them up for every `Upload (...)` task you want to use. Here's how to do it:
- Press F1 (on Mac it's usually Fn+F1)
- Switch PlatformIO Project Environment from the bottom bar *(Optional. Otherwise, default environment from the platformio.ini is used)*
- Select `Tasks: Configure Task` *(type a part of the name and click it when it appears)*
- Select `Upload (...)` task you need to use *(type a part of the name and click it when it appears)*
- An editor for a JSON config opens. You'll see a section added with your task name, ex.:
```json
"type": "PlatformIO",
"task": "Upload (itead-sonoff-th)",
"problemMatcher": [
"$platformio"
]
```
- Add the `options` section before the `problemMatcher`, so you have this:
```json
"type": "PlatformIO",
"task": "Upload (itead-sonoff-th)",
"options": {
"env": {
"ESPURNA_IP": "192.168.4.1",
"ESPURNA_AUTH": "fibonacci"
}
},
"problemMatcher": [
"$platformio"
]
```
- If you have custom IP or password, put them here. Otherwise, use `192.168.4.1` and `fibonacci`
- If you have Zeroconf configured, you can use Zeroconf names here, ex: `sonoff-kitchen.local`
- Save and close the file. Now you can OTA upload this target successfully
To reuse the same environment (like `itead-sonoff-th`) you will need to manually specify platformio command as a "shell" task. The pro is you can seamlessly support several devices with different IPs and passwords right from the VSCode (ref: [Platform.IO documentation](http://docs.platformio.org/en/latest/ide/vscode.html#custom-tasks)).
The example below uses special hardware environment, however it is encouraged to use `esp8266--base` environments instead and provide hardware flags via `ESPURNA_FLAGS` environment variable (e.g. `"ESPURNA_FLAGS": "-DITEAD_SONOFF_BASIC"`)
Here we are declaring "Arbol1" and "Light1" tasks that use the same `itead-sonoff-basic` environment:
```json
{
"label": "PlatformIO: Arbol1",
"type": "shell",
"command": "platformio run -e itead-sonoff-basic -t upload",
"options": {
"env": {
"ESPURNA_IP": "192.168.1.100",
"ESPURNA_AUTH": "---"
}
},
"problemMatcher": [
"$platformio"
]
},
{
"label": "PlatformIO: Light1",
"type": "shell",
"command": "platformio run -e itead-sonoff-basic -t upload",
"options": {
"env": {
"ESPURNA_IP": "192.168.1.200",
"ESPURNA_AUTH": "---"
}
},
"problemMatcher": [
"$platformio"
]
}
```
Source: **@oscarsan1**, [xoseperez/espurna#1515](https://github.com/xoseperez/espurna/issues/1515)