Heltec Wireless Stick V3 863-928

Heltec Wireless Stick V3 863-928.

  • ESP32-S3FN8
  • Xtensa 32-bit LX7 dual core processor, five stage pipeline rack Structure, main frequency up to 240MHz
  • SX1262 LoRa node chip
  • Onboard SH1.25-2 battery interface, integrated lithium battery management system
  • Onboard 0.49-inch 64*32 dot matrix OLED display
  • Integrated CP2102 USB to serial port chip

back to microcontrollers page.

Links

Heltec Wireless Stick V3, Github Heltec Automation ESP32_LoRaWAN, Heltec_ESP32, Meshtastic supported devices Heltec,

local links

c2, eb,

History

2023-08-17: eb - meshtastic set region

tingo@kg-elitebook$ meshtastic --port /dev/cuaU0 --set lora.region EU_868
Connected to radio
Set lora.region to EU_868
Writing modified preferences to device

try info again

tingo@kg-elitebook$ meshtastic --port /dev/cuaU0 --info
Connected to radio

Owner: Meshtastic b7d0 (b7d0)
My info: { "myNodeNum": 1976481744, "rebootCount": 4, "minAppVersion": 20300 }
Metadata: { "firmwareVersion": "2.1.23.04bbdc6", "deviceStateVersion": 20, "canShutdown": true, "hasWifi": true, "hasBluetooth": true, "positionFlags": 3, "hwModel": "HELTEC_WSL_V3" }

Nodes in mesh: {"!75ceb7d0": {"num": 1976481744, "user": {"longName": "Meshtastic b7d0", "shortName": "b7d0", "macaddr": "dc:54:75:ce:b7:d0", "hwModel": "HELTEC_WSL_V3"}, "position": {}}}

Preferences: { "device": { "serialEnabled": true, "nodeInfoBroadcastSecs": 10800 }, "position": { "positionBroadcastSecs": 900, "positionBroadcastSmartEnabled": true, "gpsEnabled": true, "gpsUpdateInterval": 120, "gpsAttemptTime": 900, "positionFlags": 3, "rxGpio": 34, "txGpio": 12, "broadcastSmartMinimumDistance": 100, "broadcastSmartMinimumIntervalSecs": 30 }, "power": { "waitBluetoothSecs": 60, "sdsSecs": 4294967295, "lsSecs": 300, "minWakeSecs": 10 }, "network": { "ntpServer": "0.pool.ntp.org" }, "display": { "screenOnSecs": 600 }, "lora": { "usePreset": true, "region": "EU_868", "hopLimit": 3, "txEnabled": true, "txPower": 27, "sx126xRxBoostedGain": true }, "bluetooth": { "enabled": true, "mode": "FIXED_PIN", "fixedPin": 123456 } }

Module preferences: { "mqtt": { "address": "mqtt.meshtastic.org", "username": "meshdev", "password": "large4cats" }, "serial": {}, "externalNotification": {}, "rangeTest": {}, "telemetry": { "deviceUpdateInterval": 900, "environmentUpdateInterval": 900, "airQualityInterval": 900 }, "cannedMessage": {}, "audio": {}, "remoteHardware": {} }

Channels:
  PRIMARY psk=default { "psk": "AQ==" }

Primary channel URL: https://meshtastic.org/e/#CgMSAQESDAgBOANAA0gBUBtoAQ

2023-08-17: eb - try meshtastic

tingo@kg-elitebook$ PATH=${PATH}:${HOME}/.local/bin
tingo@kg-elitebook$ export PATH

find it

tingo@kg-elitebook$ which meshtastic
/home/tingo/.local/bin/meshtastic

parameters

tingo@kg-elitebook$ meshtastic --help
usage: meshtastic [-h] [--configure CONFIGURE] [--export-config] [--port PORT] [--host HOST] [--seriallog SERIALLOG] [--info]
                  [--get-canned-message] [--get-ringtone] [--nodes] [--qr] [--get GET] [--set SET SET] [--seturl SETURL]
                  [--ch-index CH_INDEX] [--ch-add CH_ADD] [--ch-del] [--ch-enable] [--ch-disable] [--ch-set CH_SET CH_SET]
                  [--ch-vlongslow] [--ch-longslow] [--ch-longfast] [--ch-medslow] [--ch-medfast] [--ch-shortslow]
                  [--ch-shortfast] [--set-owner SET_OWNER] [--set-canned-message SET_CANNED_MESSAGE]
                  [--set-ringtone SET_RINGTONE] [--set-owner-short SET_OWNER_SHORT] [--set-ham SET_HAM] [--dest DEST]
                  [--sendtext SENDTEXT] [--sendping] [--traceroute TRACEROUTE] [--ack] [--reboot] [--reboot-ota] [--shutdown]
                  [--device-metadata] [--begin-edit] [--commit-edit] [--factory-reset] [--reset-nodedb] [--reply]
                  [--gpio-wrb GPIO_WRB GPIO_WRB] [--gpio-rd GPIO_RD] [--gpio-watch GPIO_WATCH] [--no-time] [--setalt SETALT]
                  [--setlat SETLAT] [--setlon SETLON] [--pos-fields [POS_FIELDS ...]] [--debug] [--test] [--ble BLE] [--noproto]
                  [--version] [--support]

optional arguments:
  -h, --help            show this help message and exit
  --configure CONFIGURE
                        Specify a path to a yaml(.yml) file containing the desired settings for the connected device.
  --export-config       Export the configuration in yaml(.yml) format.
  --port PORT           The port the Meshtastic device is connected to, i.e. /dev/ttyUSB0. If unspecified, we'll try to find it.
  --host HOST           The hostname/ipaddr of the device to connect to (over TCP)
  --seriallog SERIALLOG
                        Log device serial output to either 'stdout', 'none' or a filename to append to.
  --info                Read and display the radio config information
  --get-canned-message  Show the canned message plugin message
  --get-ringtone        Show the stored ringtone
  --nodes               Print Node List in a pretty formatted table
  --qr                  Display the QR code that corresponds to the current channel
  --get GET             Get a preferences field. Use an invalid field such as '0' to get a list of all fields. Can use either
                        snake_case or camelCase format. (ex: 'ls_secs' or 'lsSecs')
  --set SET SET         Set a preferences field. Can use either snake_case or camelCase format. (ex: 'ls_secs' or 'lsSecs')
  --seturl SETURL       Set a channel URL
  --ch-index CH_INDEX   Set the specified channel index. Channels start at 0 (0 is the PRIMARY channel).
  --ch-add CH_ADD       Add a secondary channel, you must specify a channel name
  --ch-del              Delete the ch-index channel
  --ch-enable           Enable the specified channel
  --ch-disable          Disable the specified channel
  --ch-set CH_SET CH_SET
                        Set a channel parameter. To see channel settings available:'--ch-set all all --ch-index 0'. Can set the
                        'psk' using this command. To disable encryption on primary channel:'--ch-set psk none --ch-index 0'. To
                        set encryption with a new random key on second channel:'--ch-set psk random --ch-index 1'. To set
                        encryption back to the default:'--ch-set psk default --ch-index 0'. To set encryption with your own key:
                        '--ch-set psk 0x1a1a1a1a2b2b2b2b1a1a1a1a2b2b2b2b1a1a1a1a2b2b2b2b1a1a1a1a2b2b2b2b --ch-index 0'.
  --ch-vlongslow        Change to the very long-range and slow channel
  --ch-longslow         Change to the long-range and slow channel
  --ch-longfast         Change to the long-range and fast channel
  --ch-medslow          Change to the med-range and slow channel
  --ch-medfast          Change to the med-range and fast channel
  --ch-shortslow        Change to the short-range and slow channel
  --ch-shortfast        Change to the short-range and fast channel
  --set-owner SET_OWNER
                        Set device owner name
  --set-canned-message SET_CANNED_MESSAGE
                        Set the canned messages plugin message (up to 200 characters).
  --set-ringtone SET_RINGTONE
                        Set the Notification Ringtone (up to 230 characters).
  --set-owner-short SET_OWNER_SHORT
                        Set device owner short name
  --set-ham SET_HAM     Set licensed Ham ID and turn off encryption
  --dest DEST           The destination node id for any sent commands, if not set '^all' or '^local' is assumed as appropriate
  --sendtext SENDTEXT   Send a text message. Can specify a destination '--dest' and/or channel index '--ch-index'.
  --sendping            Send a ping message (which requests a reply)
  --traceroute TRACEROUTE
                        Traceroute from connected node to a destination. You need pass the destination ID as argument, like this:
                        '--traceroute !ba4bf9d0' Only nodes that have the encryption key can be traced.
  --ack                 Use in combination with --sendtext to wait for an acknowledgment.
  --reboot              Tell the destination node to reboot
  --reboot-ota          Tell the destination node to reboot into factory firmware
  --shutdown            Tell the destination node to shutdown
  --device-metadata     Get the device metadata from the node
  --begin-edit          Tell the node to open a transaction to edit settings
  --commit-edit         Tell the node to commit open settings transaction
  --factory-reset       Tell the destination node to install the default config
  --reset-nodedb        Tell the destination node clear its list of nodes
  --reply               Reply to received messages
  --gpio-wrb GPIO_WRB GPIO_WRB
                        Set a particular GPIO # to 1 or 0
  --gpio-rd GPIO_RD     Read from a GPIO mask (ex: '0x10')
  --gpio-watch GPIO_WATCH
                        Start watching a GPIO mask for changes (ex: '0x10')
  --no-time             Suppress sending the current time to the mesh
  --setalt SETALT       Set device altitude (allows use without GPS)
  --setlat SETLAT       Set device latitude (allows use without GPS)
  --setlon SETLON       Set device longitude (allows use without GPS)
  --pos-fields [POS_FIELDS ...]
                        Specify fields to send when sending a position. Use no argument for a list of valid values. Can pass
                        multiple values as a space separated list like this: '--pos-fields POS_ALTITUDE POS_ALT_MSL'
  --debug               Show API library debug log messages
  --test                Run stress test against all connected Meshtastic devices
  --ble BLE             BLE mac address to connect to (BLE is not yet supported for this tool)
  --noproto             Don't start the API, just function as a dumb serial terminal.
  --version             show program's version number and exit
  --support             Show support info (useful when troubleshooting an issue)

2023-08-17: eb - install meshtastic prerequisites

tingo@kg-elitebook$ pip --version
pip 23.1.2 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)

install pytap and meshtastic

tingo@kg-elitebook$ pip install --upgrade pytap2
Defaulting to user installation because normal site-packages is not writeable
Collecting pytap2
  Downloading pytap2-2.3.0-py3-none-any.whl (5.8 kB)
Installing collected packages: pytap2
Successfully installed pytap2-2.3.0

meshtastic

tingo@kg-elitebook$ pip install --upgrade meshtastic
Defaulting to user installation because normal site-packages is not writeable
Collecting meshtastic
  Downloading meshtastic-2.2.0-py3-none-any.whl (89 kB)
     ---------------------------------------- 89.7/89.7 kB 4.7 MB/s eta 0:00:00
Requirement already satisfied: pyserial>=3.4 in /usr/local/lib/python3.9/site-packages (from meshtastic) (3.5)
Collecting protobuf>=3.13.0 (from meshtastic)
  Downloading protobuf-4.24.0-py3-none-any.whl (175 kB)
     ---------------------------------------- 175.7/175.7 kB 7.7 MB/s eta 0:00:00
Collecting requests>=2.25.0 (from meshtastic)
  Downloading requests-2.31.0-py3-none-any.whl (62 kB)
     ---------------------------------------- 62.6/62.6 kB 9.5 MB/s eta 0:00:00
Collecting pypubsub>=4.0.3 (from meshtastic)
  Downloading Pypubsub-4.0.3-py3-none-any.whl (61 kB)
     ---------------------------------------- 61.4/61.4 kB 12.5 MB/s eta 0:00:00
Collecting dotmap>=1.3.14 (from meshtastic)
  Downloading dotmap-1.3.30-py3-none-any.whl (11 kB)
Collecting pexpect>=4.6.0 (from meshtastic)
  Downloading pexpect-4.8.0-py2.py3-none-any.whl (59 kB)
     ---------------------------------------- 59.0/59.0 kB 12.1 MB/s eta 0:00:00
Collecting pyqrcode>=1.2.1 (from meshtastic)
  Downloading PyQRCode-1.2.1.zip (41 kB)
     ---------------------------------------- 41.9/41.9 kB 8.4 MB/s eta 0:00:00
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting tabulate>=0.8.9 (from meshtastic)
  Downloading tabulate-0.9.0-py3-none-any.whl (35 kB)
Collecting timeago>=1.0.15 (from meshtastic)
  Downloading timeago-1.0.16-py3-none-any.whl (29 kB)
Collecting pyyaml (from meshtastic)
  Downloading PyYAML-6.0.1.tar.gz (125 kB)
     ---------------------------------------- 125.2/125.2 kB 21.7 MB/s eta 0:00:00
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting ptyprocess>=0.5 (from pexpect>=4.6.0->meshtastic)
  Downloading ptyprocess-0.7.0-py2.py3-none-any.whl (13 kB)
Collecting charset-normalizer<4,>=2 (from requests>=2.25.0->meshtastic)
  Downloading charset_normalizer-3.2.0-py3-none-any.whl (46 kB)
     ---------------------------------------- 46.7/46.7 kB 9.0 MB/s eta 0:00:00
Collecting idna<4,>=2.5 (from requests>=2.25.0->meshtastic)
  Downloading idna-3.4-py3-none-any.whl (61 kB)
     ---------------------------------------- 61.5/61.5 kB 12.1 MB/s eta 0:00:00
Collecting urllib3<3,>=1.21.1 (from requests>=2.25.0->meshtastic)
  Downloading urllib3-2.0.4-py3-none-any.whl (123 kB)
     ---------------------------------------- 123.9/123.9 kB 22.9 MB/s eta 0:00:00
Collecting certifi>=2017.4.17 (from requests>=2.25.0->meshtastic)
  Downloading certifi-2023.7.22-py3-none-any.whl (158 kB)
     ---------------------------------------- 158.3/158.3 kB 25.9 MB/s eta 0:00:00
Building wheels for collected packages: pyqrcode, pyyaml
  Building wheel for pyqrcode (pyproject.toml) ... done
  Created wheel for pyqrcode: filename=PyQRCode-1.2.1-py3-none-any.whl size=36221 sha256=5b94ed9bd36a78171cb448ca681c02b4b0b48fa07e079b54cd92a9ec70273620
  Stored in directory: /usr/home/tingo/.cache/pip/wheels/da/75/c0/38c7f82750de2725429b6b8571dca254249d73f6c882c5d9b1
  Building wheel for pyyaml (pyproject.toml) ... done
  Created wheel for pyyaml: filename=PyYAML-6.0.1-cp39-cp39-freebsd_13_2_release_amd64.whl size=45373 sha256=932f0b23eb2978a1fa86bc9b9aad3d533d7d15ed4d4ca8a9db24ced42ad7382a
  Stored in directory: /usr/home/tingo/.cache/pip/wheels/1c/ff/88/3a317d1db793206ab64cb66367bf6f84186b75849656be786a
Successfully built pyqrcode pyyaml
Installing collected packages: timeago, pyqrcode, ptyprocess, dotmap, urllib3, tabulate, pyyaml, pypubsub, protobuf, pexpect, idna, charset-normalizer, certifi, requests, meshtastic
  WARNING: The script tabulate is installed in '/home/tingo/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
  WARNING: The script normalizer is installed in '/home/tingo/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
  WARNING: The scripts mesh-tunnel and meshtastic are installed in '/home/tingo/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed certifi-2023.7.22 charset-normalizer-3.2.0 dotmap-1.3.30 idna-3.4 meshtastic-2.2.0 pexpect-4.8.0 protobuf-4.24.0 ptyprocess-0.7.0 pypubsub-4.0.3 pyqrcode-1.2.1 pyyaml-6.0.1 requests-2.31.0 tabulate-0.9.0 timeago-1.0.16 urllib3-2.0.4

2023-08-17: eb - flash Meshtastic firmware

tingo@kg-elitebook$ ./device-install.sh -p /dev/cuaU0 -P python3.9 -f ./firmware-heltec-wsl-v3-2.1.23.04bbdc6.bin
Trying to flash ./firmware-heltec-wsl-v3-2.1.23.04bbdc6.bin, but first erasing and writing system information
esptool.py v4.5
Serial port /dev/cuaU0
Connecting.........
Detecting chip type... ESP32-S3
Chip is ESP32-S3 (revision v0.1)
Features: WiFi, BLE
Crystal is 40MHz
MAC: dc:54:75:ce:b7:d0
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 3.0s
Hard resetting via RTS pin...
esptool.py v4.5
Serial port /dev/cuaU0
Connecting.........
Detecting chip type... ESP32-S3
Chip is ESP32-S3 (revision v0.1)
Features: WiFi, BLE
Crystal is 40MHz
MAC: dc:54:75:ce:b7:d0
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Flash will be erased from 0x00000000 to 0x001dbfff...
Compressed 1948288 bytes to 1173390...
Wrote 1948288 bytes (1173390 compressed) at 0x00000000 in 103.6 seconds (effective 150.5 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...
esptool.py v4.5
Serial port /dev/cuaU0
Connecting........
Detecting chip type... ESP32-S3
Chip is ESP32-S3 (revision v0.1)
Features: WiFi, BLE
Crystal is 40MHz
MAC: dc:54:75:ce:b7:d0
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Flash will be erased from 0x00260000 to 0x002e2fff...
Compressed 534624 bytes to 328047...
Wrote 534624 bytes (328047 compressed) at 0x00260000 in 29.1 seconds (effective 147.1 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...
esptool.py v4.5
Serial port /dev/cuaU0
Connecting.........
Detecting chip type... ESP32-S3
Chip is ESP32-S3 (revision v0.1)
Features: WiFi, BLE
Crystal is 40MHz
MAC: dc:54:75:ce:b7:d0
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Flash will be erased from 0x00300000 to 0x003fffff...
Compressed 1048576 bytes to 438103...
Wrote 1048576 bytes (438103 compressed) at 0x00300000 in 39.6 seconds (effective 212.0 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

2023-08-17: eb - using esptool

tingo@kg-elitebook$ esptool.py version
esptool.py v4.5
4.5

check connectivity

tingo@kg-elitebook$ esptool.py --port /dev/cuaU0 chip_id
esptool.py v4.5
Serial port /dev/cuaU0
Connecting.........
Detecting chip type... ESP32-S3
Chip is ESP32-S3 (revision v0.1)
Features: WiFi, BLE
Crystal is 40MHz
MAC: dc:54:75:ce:b7:d0
Uploading stub...
Running stub...
Stub running...
Warning: ESP32-S3 has no Chip ID. Reading MAC instead.
MAC: dc:54:75:ce:b7:d0
Hard resetting via RTS pin...

2023-08-17: eb - trying to flash Mestastic firmware via web installer (in Chromium) - it doesn't find any serial ports.

2023-08-17: eb - connecting the Wireless Stick V3 to a FreeBSD laptop, I get this in /var/log/messages:

Aug 17 19:34:15 kg-elitebook kernel: ugen0.3: <Silicon Labs CP2102 USB to UART Bridge Controller> at usbus0
Aug 17 19:34:15 kg-elitebook kernel: uslcom0 on uhub0
Aug 17 19:34:15 kg-elitebook kernel: uslcom0: <CP2102 USB to UART Bridge Controller> on usbus0

usbconfig

root@kg-elitebook# usbconfig -d ugen0.3
ugen0.3: <Silicon Labs CP2102 USB to UART Bridge Controller> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (100mA)

dump device description

root@kg-elitebook# usbconfig -d ugen0.3 dump_device_desc
ugen0.3: <Silicon Labs CP2102 USB to UART Bridge Controller> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (100mA)

  bLength = 0x0012 
  bDescriptorType = 0x0001 
  bcdUSB = 0x0110 
  bDeviceClass = 0x0000  <Probed by interface class>
  bDeviceSubClass = 0x0000 
  bDeviceProtocol = 0x0000 
  bMaxPacketSize0 = 0x0040 
  idVendor = 0x10c4 
  idProduct = 0xea60 
  bcdDevice = 0x0100 
  iManufacturer = 0x0001  <Silicon Labs>
  iProduct = 0x0002  <CP2102 USB to UART Bridge Controller>
  iSerialNumber = 0x0003  <0001>
  bNumConfigurations = 0x0001 

current config

root@kg-elitebook# usbconfig -d ugen0.3 dump_curr_config_desc
ugen0.3: <Silicon Labs CP2102 USB to UART Bridge Controller> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (100mA)


 Configuration index 0

    bLength = 0x0009 
    bDescriptorType = 0x0002 
    wTotalLength = 0x0020 
    bNumInterfaces = 0x0001 
    bConfigurationValue = 0x0001 
    iConfiguration = 0x0000  <no string>
    bmAttributes = 0x0080 
    bMaxPower = 0x0032 

    Interface 0
      bLength = 0x0009 
      bDescriptorType = 0x0004 
      bInterfaceNumber = 0x0000 
      bAlternateSetting = 0x0000 
      bNumEndpoints = 0x0002 
      bInterfaceClass = 0x00ff  <Vendor specific>
      bInterfaceSubClass = 0x0000 
      bInterfaceProtocol = 0x0000 
      iInterface = 0x0002  <CP2102 USB to UART Bridge Controller>

     Endpoint 0
        bLength = 0x0007 
        bDescriptorType = 0x0005 
        bEndpointAddress = 0x0081  <IN>
        bmAttributes = 0x0002  <BULK>
        wMaxPacketSize = 0x0040 
        bInterval = 0x0000 
        bRefresh = 0x0000 
        bSynchAddress = 0x0000 

     Endpoint 1
        bLength = 0x0007 
        bDescriptorType = 0x0005 
        bEndpointAddress = 0x0001  <OUT>
        bmAttributes = 0x0002  <BULK>
        wMaxPacketSize = 0x0040 
        bInterval = 0x0000 
        bRefresh = 0x0000 
        bSynchAddress = 0x0000 

2023-07-24: the package arrived, straight into my mailbox. Contents:

1 x LoRa V3 board
1 x antenna cable
1 x antanna
1 x battery cable
2 x pin headers (1 row x 18)

2023-07-11: the order shipped.

2023-07-10: From AliExpress, Heltec Automation Store, I ordered 1 x Heltec Wireless Stick V3 863-928. Price was USD 15.01, the other USD 16.15, shipping USD 7.13 and tax USD 9.07, with USD 2.- discount, a total of USD 45.36. (I also ordered a different stick).