CMACLib 函数未在 Arduino loramesh sketch 中运行

问题描述 投票:0回答:1

我制作了一个 LoRa Mesh 网络,需要一些身份验证,因此我使用了CMACLib 库,这是一个用于 Arduino 的轻量级身份验证库,用于生成 MACTags 并使用基于 AES 的 CMAC 算法。

该库的一个特定函数“subkeys = cmac_generate_subkeys(key)”在我的 loramesh 代码中不起作用,但在使用 LoRa 的正常接收发送草图中工作正常。对于 Mesh 网络代码,它的灵感来自 lora-mesh。我自己做了一些更改,例如路由表条目、发送模式、标志,但我认为这不是问题。有人可以帮助我吗?

因此,在调用该函数后,节点没有初始化,它应该可以工作,我知道 LoRa 是单工设备,它不能像 loramesh 类一样工作,但它只是发送一次性身份验证,如果有人知道如何实现 RHMesh ::MeshApplicationMessage Struct Reference 我只会在其中进行有效负载传输,也许这会起作用..

#include <LoRa.h>
#include <EEPROM.h>
#include <RHRouter.h>
#include <RHMesh.h>
#include <RH_RF95.h>
#include <AESLib.h>
#include <CMACLib.h>
#define RH_HAVE_SERIAL
#define LED 13
#define N_NODES 2

uint8_t nodeId;
uint8_t routes[N_NODES]; // full routing table for mesh
int16_t rssi[N_NODES]; // signal strength info

// 16 bytes key
  uint8_t key[] = {0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C};

  // struct for holding the subkeys that are derived from our key
  struct cmac_subkeys_t subkeys;

// Singleton instance of the radio driver
RH_RF95 rf95;

// Class to manage message delivery and receipt, using the driver declared above
RHMesh *manager;

// message buffer
char buf[RH_MESH_MAX_MESSAGE_LEN];

void setup() {
  randomSeed(analogRead(0));
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
  while (!Serial) ; // Wait for serial port to be available
  nodeId = EEPROM.read(0);
  if (nodeId > 10) {
    Serial.print(F("EEPROM nodeId invalid: "));
    Serial.println(nodeId);
    nodeId = 1;
  }
  Serial.print(F("initializing node "));

  manager = new RHMesh(rf95, nodeId);

  if (!manager->init()) {
    Serial.println(F("init failed"));
  } else {
    Serial.println("done");
  }

  if (!LoRa.begin(868E6)) {
      Serial.println("Starting LoRa failed!");
      while (1);
    }

  rf95.setTxPower(50, false);
  rf95.setFrequency(868.0);

  // long range configuration requires for on-air time
  boolean longRange = false;
  if (longRange) {
    RH_RF95::ModemConfig modem_config = {
      0x78, // Reg 0x1D: BW=125kHz, Coding=4/8, Header=explicit
      0xC4, // Reg 0x1E: Spread=4096chips/symbol, CRC=enable
      0x08  // Reg 0x26: LowDataRate=On, Agc=Off.  0x0C is LowDataRate=ON, ACG=ON
    };
    rf95.setModemRegisters(&modem_config);
    }
    else
    {
    if (!rf95.setModemConfig(RH_RF95::Bw125Cr45Sf128)) {
      Serial.println(F("set config failed"));
    }
  }

  Serial.println("RF95 ready");
  for(uint8_t n=1;n<=N_NODES;n++) {
    routes[n-1] = 0;
    rssi[n-1] = 0;
  }

  Serial.print(F("mem = "));
  Serial.println(freeMem());
  subkeys = cmac_generate_subkeys(key);
}

所以初始化节点后管理器没有响应 它只是在串行监视器中显示“初始化节点”就是这样。无论我在哪里放置 subkeys = cmac_generate_subkeys(key) 都没关系。 我认为用 lora 和 rh95 初始化可能是个问题,所以只用 rf95 制作了一个不同的草图(rhmesh 是 rf95 的子类库),但同样的问题仍然存在,也许 radiohead 库不允许外部函数工作或者什么?请帮忙..

arduino aes lora cmac
1个回答
0
投票

我使用arduino mega而不是uno,代码可以正常工作,代码没有面对动态内存(37%)或程序存储空间(51%),但是更改主板有效,我不知道如何?

© www.soinside.com 2019 - 2024. All rights reserved.