TTGO T-Beam topic

There are no special low power features on T-Beam, i.e. it is not possible to deactivate the USB driver and the battery charging circuit. For low power you should select other device, i.e. Nexus by Ideetron.

Does LoRa32 v2.1 have these issues fixed? I could add a gps module to that board.

No. As far as i see all TTGO boards are based on the same common schematics.
Again, if you’re looking for low power devices, you’re looking for something more elaborated, and again, i would recommend www.ideetron.nl

You may also go for a SODAQ.

1 Like

Ok, thank you! I’ll look into them.

hello,
i was triyng to program the ttgo t-beam butt i get this error:

LMIC_setSession (0x1, DEVADDR, NWKSKEY, APPSKEY);

exit status 1
‘DEVADDR’ was not declared in this scope

Can you share your code ? But please use proper formatting as described HERE

Here is my code:

#include <TinyGPS++.h>
#include <lmic.h>
#include <hal/hal.h>
#include <WiFi.h>

// UPDATE the config.h file in the same folder WITH YOUR TTN KEYS AND ADDR.
#include "config.h"

// T-Beam specific hardware
#define BUILTIN_LED 21
#define GPS_TX 12
#define GPS_RX 15

// The TinyGPS++ object
TinyGPSPlus gps;
HardwareSerial GPSSerial(1);

char s[32]; // used to sprintf for Serial output

// These callbacks are only used in over-the-air activation, so they are
// left empty here (we cannot leave them out completely unless
// DISABLE_JOIN is set in config.h, otherwise the linker will complain).
void os_getArtEui (u1_t* buf) { }
void os_getDevEui (u1_t* buf) { }
void os_getDevKey (u1_t* buf) { }

static osjob_t sendjob;
// Schedule TX every this many seconds (might become longer due to duty cycle limitations).
const unsigned TX_INTERVAL = 30;

// Pin mapping
const lmic_pinmap lmic_pins = {
  .nss = 18,
  .rxtx = LMIC_UNUSED_PIN,
  .rst = LMIC_UNUSED_PIN, // was "14,"
  .dio = {26, 33, 32},
};

unsigned long last_update = 0;
String toLog;
uint8_t txBuffer[9];
uint32_t LatitudeBinary, LongitudeBinary;
uint16_t altitudeGps;
uint8_t hdopGps;

#define PMTK_SET_NMEA_UPDATE_05HZ  "$PMTK220,2000*1C"
#define PMTK_SET_NMEA_UPDATE_1HZ  "$PMTK220,1000*1F"
#define PMTK_SET_NMEA_OUTPUT_RMCGGA "$PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28"

void build_packet()
{
  while (GPSSerial.available())
  {
    gps.encode(GPSSerial.read());
  }
  LatitudeBinary = ((gps.location.lat() + 90) / 180.0) * 16777215;
  LongitudeBinary = ((gps.location.lng() + 180) / 360.0) * 16777215;
  
  sprintf(s, "Lat: %f", gps.location.lat());
  Serial.println(s);
  
  sprintf(s, "Lng: %f", gps.location.lng());
  Serial.println(s);
  
  txBuffer[0] = ( LatitudeBinary >> 16 ) & 0xFF;
  txBuffer[1] = ( LatitudeBinary >> 8 ) & 0xFF;
  txBuffer[2] = LatitudeBinary & 0xFF;

  txBuffer[3] = ( LongitudeBinary >> 16 ) & 0xFF;
  txBuffer[4] = ( LongitudeBinary >> 8 ) & 0xFF;
  txBuffer[5] = LongitudeBinary & 0xFF;

  altitudeGps = gps.altitude.meters();
  txBuffer[6] = ( altitudeGps >> 8 ) & 0xFF;
  txBuffer[7] = altitudeGps & 0xFF;

  hdopGps = gps.hdop.value()/10;
  txBuffer[8] = hdopGps & 0xFF;

  toLog = "";
  for(size_t i = 0; i<sizeof(txBuffer); i++)
  {
    char buffer[3];
    sprintf(buffer, "%02x", txBuffer[i]);
    toLog = toLog + String(buffer);
  }
  Serial.println(toLog);
}

void onEvent (ev_t ev) {
  switch (ev) {
    case EV_SCAN_TIMEOUT:
      Serial.println(F("EV_SCAN_TIMEOUT"));
      break;
    case EV_BEACON_FOUND:
      Serial.println(F("EV_BEACON_FOUND"));
      break;
    case EV_BEACON_MISSED:
      Serial.println(F("EV_BEACON_MISSED"));
      break;
    case EV_BEACON_TRACKED:
      Serial.println(F("EV_BEACON_TRACKED"));
      break;
    case EV_JOINING:
      Serial.println(F("EV_JOINING"));
      break;
    case EV_JOINED:
      Serial.println(F("EV_JOINED"));
      // Disable link check validation (automatically enabled
      // during join, but not supported by TTN at this time).
      LMIC_setLinkCheckMode(0);
      break;
    case EV_RFU1:
      Serial.println(F("EV_RFU1"));
      break;
    case EV_JOIN_FAILED:
      Serial.println(F("EV_JOIN_FAILED"));
      break;
    case EV_REJOIN_FAILED:
      Serial.println(F("EV_REJOIN_FAILED"));
      break;
    case EV_TXCOMPLETE:
      Serial.println(F("EV_TXCOMPLETE (includes waiting for RX windows)"));
      digitalWrite(BUILTIN_LED, LOW);
      if (LMIC.txrxFlags & TXRX_ACK) {
        Serial.println(F("Received Ack"));
      }
      if (LMIC.dataLen) {
        sprintf(s, "Received %i bytes of payload", LMIC.dataLen);
        Serial.println(s);
        sprintf(s, "RSSI %d SNR %.1d", LMIC.rssi, LMIC.snr);
        Serial.println(s);
      }
      // Schedule next transmission
      os_setTimedCallback(&sendjob, os_getTime() + sec2osticks(TX_INTERVAL), do_send);
      break;
    case EV_LOST_TSYNC:
      Serial.println(F("EV_LOST_TSYNC"));
      break;
    case EV_RESET:
      Serial.println(F("EV_RESET"));
      break;
    case EV_RXCOMPLETE:
      // data received in ping slot
      Serial.println(F("EV_RXCOMPLETE"));
      break;
    case EV_LINK_DEAD:
      Serial.println(F("EV_LINK_DEAD"));
      break;
    case EV_LINK_ALIVE:
      Serial.println(F("EV_LINK_ALIVE"));
      break;
    default:
      Serial.println(F("Unknown event"));
      break;
  }
}

void do_send(osjob_t* j) {
  // Check if there is not a current TX/RX job running
  if (LMIC.opmode & OP_TXRXPEND) {
    Serial.println(F("OP_TXRXPEND, not sending"));
  } else {
    // Prepare upstream data transmission at the next possible time.
    build_packet();
    LMIC_setTxData2(1, txBuffer, sizeof(txBuffer), 0);
    Serial.println(F("Packet queued"));
    digitalWrite(BUILTIN_LED, HIGH);
  }
  // Next TX is scheduled after TX_COMPLETE event.
}

void setup() {
  Serial.begin(115200);
  Serial.println(F("TTN Mapper"));
  
  //Turn off WiFi and Bluetooth
  WiFi.mode(WIFI_OFF);
  btStop();
  
  GPSSerial.begin(9600, SERIAL_8N1, GPS_TX, GPS_RX);
  GPSSerial.setTimeout(2);

  GPSSerial.println(F(PMTK_SET_NMEA_OUTPUT_RMCGGA));
  GPSSerial.println(F(PMTK_SET_NMEA_UPDATE_1HZ));   // 1 Hz update rate
  
  // LMIC init
  os_init();
  // Reset the MAC state. Session and pending data transfers will be discarded.
  LMIC_reset();
  
 
  LMIC_setupChannel(0, 868100000, DR_RANGE_MAP(DR_SF12, DR_SF7),  BAND_CENTI);      // g-band
  LMIC_setupChannel(1, 868300000, DR_RANGE_MAP(DR_SF12, DR_SF7B), BAND_CENTI);      // g-band
  LMIC_setupChannel(2, 868500000, DR_RANGE_MAP(DR_SF12, DR_SF7),  BAND_CENTI);      // g-band
  LMIC_setupChannel(3, 867100000, DR_RANGE_MAP(DR_SF12, DR_SF7),  BAND_CENTI);      // g-band
  LMIC_setupChannel(4, 867300000, DR_RANGE_MAP(DR_SF12, DR_SF7),  BAND_CENTI);      // g-band
  LMIC_setupChannel(5, 867500000, DR_RANGE_MAP(DR_SF12, DR_SF7),  BAND_CENTI);      // g-band
  LMIC_setupChannel(6, 867700000, DR_RANGE_MAP(DR_SF12, DR_SF7),  BAND_CENTI);      // g-band
  LMIC_setupChannel(7, 867900000, DR_RANGE_MAP(DR_SF12, DR_SF7),  BAND_CENTI);      // g-band
  LMIC_setupChannel(8, 868800000, DR_RANGE_MAP(DR_FSK,  DR_FSK),  BAND_MILLI);      // g2-band

  // Disable link check validation
  LMIC_setLinkCheckMode(0);

  // TTN uses SF9 for its RX2 window.
  LMIC.dn2Dr = DR_SF9;

  // Set data rate and transmit power for uplink (note: txpow seems to be ignored by the library)
  LMIC_setDrTxpow(DR_SF7,14); 
  
  // Start job 
  do_send(&sendjob);
  pinMode(BUILTIN_LED, OUTPUT);
  digitalWrite(BUILTIN_LED, LOW);
}

void loop() {
  os_runloop_once();
}
1 Like

UPDATE the config.h file in the same folder WITH YOUR TTN KEYS AND ADDR.

2 Likes

thank you. it works
is there a way to see on an oled display wich gateway saw me and how far away by calculathng the distance between t-beam gps and the location of the gateway?

you can create an application that receives MQTT from the TTN backend (a dedicated RPI ?) and then calcultae a distance between two points and transmits the result over lorawan or maybe a webpage which you can see on your mobile.

it’s done by someone here but I can’t find the link now

1 Like

thank you.

As I was about to get a couple of TTGO T-Beam, I realise there are two different versions with a different GPS chip (NEO-6M & NEO M8N) - I am not sure if there’s any difference in the schematic that would influence the possibility of going idle / sleep on low power.
Anyone has any knowledge about that? Or any success in achieving low power consumption?

I was speaking with apparently the manufacturer representative in WeChat, if I can gather any information about that I will keep everyone in the loop.

No I think it is just the GPS chip that is changed.

Tried to use serial to configure the NEO-6M on my ttgo t-beam but had no succes. Very strange I wonder if its a fake one.

Same here with NEO-6M on board. I also wonder if the NEO is a fake.

hello,
t-beam was working fine untill 2 days ago…i have no data ever since.
i tried to reflash butt still no luck
i get this on the serial monitor…it seems like it is on endless restart loop

Rebooting…
ets Jun 8 2016 00:22:57

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:812
load:0x40078000,len:0
load:0x40078000,len:11572
entry 0x40078a5c
assertion “entry < ENTRY_COUNT” failed: file “/Users/ficeto/Desktop/ESP32/ESP32/esp-idf-public/components/nvs_flash/src/nvs_page.hpp”, line 188, function: uint32_t nvs::Page::getEntryAddress(size_t) const
abort() was called at PC 0x400d93e3 on core 0

Backtrace: 0x40091428:0x3ffce520 0x40091603:0x3ffce540 0x400d93e3:0x3ffce560 0x400dd72b:0x3ffce590 0x400ddd0f:0x3ffce5b0 0x400dea71:0x3ffce600 0x400dcf0e:0x3ffce660 0x400dca2a:0x3ffce6b0 0x400dcac3:0x3ffce6d0 0x400dcb0e:0x3ffce6f0 0x400d5170:0x3ffce710 0x401150bf:0x3ffce730 0x400da2ca:0x3ffce760

Rebooting…
ets Jun 8 2016 00:22:57

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:812
load:0x40078000,len:0
load:0x40078000,len:11572
entry 0x40078a5c
assertion “entry < ENTRY_COUNT” failed: file “/Users/ficeto/Desktop/ESP32/ESP32/esp-idf-public/components/nvs_flash/src/nvs_page.hpp”, line 188, function: uint32_t nvs::Page::getEntryAddress(size_t) const
abort() was called at PC 0x400d93e3 on core 0

Backtrace: 0x40091428:0x3ffce520 0x40091603:0x3ffce540 0x400d93e3:0x3ffce560 0x400dd72b:0x3ffce590 0x400ddd0f:0x3ffce5b0 0x400dea71:0x3ffce600 0x400dcf0e:0x3ffce660 0x400dca2a:0x3ffce6b0 0x400dcac3:0x3ffce6d0 0x400dcb0e:0x3ffce6f0 0x400d5170:0x3ffce710 0x401150bf:0x3ffce730 0x400da2ca:0x3ffce760

One of LilyGO’s AliExpress stores is doing a promo sale of the T-Beam boards right now -

p2-ae-discount-eu

1 Like

Did anybody already find a suitable industrial casing for this device?

3 Likes

I have suggested LilyGo to provide T-Beam with IPEX/UFL connector.
That will make them easier to fit in different types of enclosures and enables more flexible antenna placement.

2 Likes

I just got my Ttgo T-beam, i tried in deep sleep mode, using 44mA, and i think it using power gps module, because it is not power down, and i look in data sheet of Neo-6M-0-001 it is not possible to turn off with out physically connection, i will try later to use on board transistor and one pin of board to turn on off.

2 Likes

5 posts were merged into an existing topic: TOOLS for TINKERERS