The Sonoff devices are great, but I prefer to use everything within my home and home automation setup to be fully under my control. Tasmota is a great way of doing just that.
I found the easiest way of flashing devices with Tasmota is using a raspberry pi. I’ve done a quick writeup on how to do this.
Installing ESPTool
Start with installing via the installer script
pip install esptool
Clone from the GitHub repository
git clone https://github.com/espressif/esptool.git
Preparing the Raspberry Pi
sudo raspi-config





Connect the Raspberry Pi to the Sonoff Device

The TXD (Transmit) and RXD (Receive) pins are marked on the raspberry pi. We can use these to communicate serially with the Sonoff Device to flash it with the Tasmota firmware.

Each Sonoff device has pins allocated to reflash the device. These boards usually don’t have headers attached. Here I soldered one to the board.
The important pins are VDD, TX, RX and GND.

Connect VDD to an external power supply. The Raspberry Pi will not be able to power the device off it’s own pins. I used an external bench power supply. Ensure the voltage is 3.3V.
Connect the GND on the power supply to both the Raspberry Pi Ground Pins and the Sonoff device’s GND pin
Connect the TXD on the Raspberry Pi to the RX Sonoff pin and connect the RXD on the Raspberry Pi to the TX Sonoff pin.
Download the Tasmota Firmware
curl http://ota.tasmota.com/tasmota/ --output tasmota.bin
This terminal command will download the latest firmware from the Tasmota site to the Raspberry Pi.
sudo ./esptool.py --port /dev/ttyS0 erase_flash
Start by erasing the devices Flash memory
The port to use on a Raspberry Pi 3 or 4 is /dev/ttyS0.
sudo ./esptool.py --port /dev/ttyS0 write_flash -fm dout 0x0 tasmota.bin
Flash the device with the dowloaded firmware.
Once flashed, reassemble the device and power it on. It should appear as an access point on the network as Tasmota-xxxx if all went well.
You can also follow the Tasmota getting started guide to continue the setup: https://tasmota.github.io/docs/Getting-Started/