Azure IoT Hub学习_文件上传

本文章内容

1.了解IoT Hub中文件存储在了哪里

2.使用Node.js Device SDK上传TXT文件

3.在storage中查看IOT设备上传的文件

1. 设备经Device SDK 上传到Azure IoT Hub的文件存储到了Storage中,需提前配置好存储文件用的Storage及容器:

 

2. 使用Node.js SDK上传文件

下载安装Node.js http://nodejs.cn/

安装Node.js SDK:

npm install azure-iot-device azure-iot-device-mqtt --save

选择一个目录。

新建文件upload_to_blob.js,以下为代码(注意修改connectionString):

'use strict';

var Protocol = require('azure-iot-device-mqtt').Mqtt;
var Client = require('azure-iot-device').Client;
var fs = require('fs');

var connectionString = 'YOUR DEIVCE CONNECT STRING';
if (!connectionString) {
  console.log('Please set the DEVICE_CONNECTION_STRING environment variable.');
  process.exit(-1);
}

var filePath = 'log.txt';

var client = Client.fromConnectionString(connectionString, Protocol);

fs.stat(filePath, function (err, fileStats) {
  if (err) {
    console.error('could not read file: ' + err.toString());
    process.exit(-1);
  } else {
    var fileStream = fs.createReadStream(filePath);

    client.uploadToBlob('testblob.txt', fileStream, fileStats.size, function (err) {
      fileStream.destroy();
      if (err) {
        console.error('error uploading file: ' + err.constructor.name + ': ' + err.message);
        process.exit(-1);
      } else {
        console.log('Upload successful');
        process.exit(0);
      }
    });
  }
});

先npm init一直回车然后yes,创建package.json文件。

创建log.txt文件,内容随意。

然后执行下面命令

node upload_to_blob.js

查看容器,上传成功!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
感谢您的提问。您的问题是如何替换以下代码中的数据以发送到Azure IoTHub: snprintf(buff, 128, "{\"topic\":\"iot\"}"); 为了替换上述代码中的数据并将其发送到Azure IoTHub,您需要了解IoT设备向IoTHub发送消息的过程。通常,IoT设备使用特定的协议(例如MQTT)将消息发送到IoTHub。您可以使用以下代码替换上述代码以使用MQTT协议将数据发送到IoTHub: String payload = "{\"topic\":\"iot\"}"; mqttClient.publish("your_topic", payload.c_str()); 在这里,“your_topic”是您想要发布消息的主题名称,payload是您想要发布的有效载荷。您还需要将IoTHub的连接详细信息配置到代码中,例如设备ID、设备密钥和IoTHub的URI。以下是发送消息到IoTHub的完整代码示例: #include <WiFi.h> #include <PubSubClient.h> // Replace with your network credentials const char* ssid = "your_SSID"; const char* password = "your_WIFI_password"; // Azure IoT Hub configuration const char* iotHubUri = "your_iothub_uri"; const char* deviceId = "your_device_id"; const char* deviceKey = "your_device_key"; const char* hostName = "your_host_name"; // MQTT client WiFiClient wifiClient; PubSubClient mqttClient(wifiClient); void setup() { Serial.begin(115200); delay(10); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); // Configuring Azure IoT Hub connection mqttClient.setServer(iotHubUri, 8883); mqttClient.setCallback(callback); String clientId = "d:" + hostName + ":" + deviceId; String username = hostName + "/" + deviceId + "/api-version=2018-06-30"; // Generating Azure SAS token String sr = hostName + "." + iotHubUri + "/devices/" + deviceId; unsigned long expiryTime = time(NULL) + 3600; // token expiration time String sig = generateSasToken(deviceKey, sr.c_str(), expiryTime); String password = sig; // Connecting to Azure IoT Hub if (mqttClient.connect(clientId.c_str(), username.c_str(), password.c_str())) { Serial.println("Connected to Azure IoT Hub"); } else { Serial.println("Azure IoT Hub connection failed"); } } void loop() { mqttClient.loop(); // Replace the following line with your data sent to Azure IoTHub String payload = "{\"topic\":\"iot\"}"; mqttClient.publish("your_topic", payload.c_str()); } // Azure IoT Hub callback void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message received on topic: "); Serial.print(topic); Serial.print(". Message: "); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); } // Function to generate Azure SAS token String generateSasToken(const char* key, const char* resourceUri, unsigned long expiryTime) { String signature; String stringToSign = urlEncode(resourceUri) + "\n" + String(expiryTime); char* decodedKey = base64Decode(key); if (decodedKey) { int hmacSize = 21; // SHA-256 produces a 256-bit (32-byte) digest, but Azure IoT Hub only takes the first 20 bytes byte hmacDigest[hmacSize]; hmacSha256((const unsigned char*)stringToSign.c_str(), stringToSign.length(), (const unsigned char*)decodedKey, strlen(decodedKey), hmacDigest); signature = base64Encode(hmacDigest, hmacSize); free(decodedKey); } return "SharedAccessSignature sr=" + urlEncode(resourceUri) + "&sig=" + urlEncode(signature) + "&se=" + String(expiryTime); } // Function to HMAC-SHA256 encode string void hmacSha256(const unsigned char* key, int keyLength, const unsigned char* message, int messageLength, byte* outputBuffer) { const int blockLength = 64; const int outputLength = 32; byte innerKeyPad[blockLength]; // K XOR ipad byte outerKeyPad[blockLength]; // K XOR opad byte innerHash[outputLength]; byte outerHash[outputLength]; byte keyBuffer[blockLength]; memset(keyBuffer, 0x00, blockLength); if (keyLength > blockLength) { SHA256_CTX sha256; sha256_init(&sha256); sha256_update(&sha256, (const byte*)key, keyLength); sha256_final(&sha256, keyBuffer); } else { memcpy(keyBuffer, key, keyLength); } // Outer hash for (int i = 0; i < blockLength; i++) { outerKeyPad[i] = keyBuffer[i] ^ 0x5C; innerKeyPad[i] = keyBuffer[i] ^ 0x36; } SHA256_CTX sha256; sha256_init(&sha256); sha256_update(&sha256, innerKeyPad, blockLength); sha256_update(&sha256, message, messageLength); sha256_final(&sha256, innerHash); sha256_init(&sha256); sha256_update(&sha256, outerKeyPad, blockLength); sha256_update(&sha256, innerHash, outputLength); sha256_final(&sha256, outputBuffer); } // Function to encode string for URL String urlEncode(String str) { String encodedString = ""; char c; char code0; char code1; for (unsigned int i = 0; i < str.length(); i++) { c = str.charAt(i); if (c == ' ') { encodedString += '+'; } else if (isalnum(c)) { encodedString += c; } else { code1 = (c & 0xf) + '0'; if ((c & 0xf) > 9) { code1 = (c & 0xf) - 10 + 'A'; } c = (c >> 4) & 0xf; code0 = c + '0'; if (c > 9) { code0 = c - 10 + 'A'; } encodedString += '%'; encodedString += code0; encodedString += code1; } yield(); } return encodedString; } // Function to decode Base64 string char* base64Decode(const char* base64String) { if (!base64String) { return NULL; } size_t inputLength = strlen(base64String); if (inputLength % 4 != 0) { return NULL; } int padding = 0; if (base64String[inputLength - 1] == '=') { padding++; if (base64String[inputLength - 2] == '=') { padding++; } } size_t outputLength = 3 * ((inputLength / 4) - padding); char* outputBuffer = (char*) malloc(outputLength + 1); if (!outputBuffer) { return NULL; } for (unsigned int i = 0, j = 0; i < inputLength;) { uint32_t sextet1 = base64DecodeCharacter(base64String[i++]); uint32_t sextet2 = base64DecodeCharacter(base64String[i++]); uint32_t sextet3 = base64DecodeCharacter(base64String[i++]); uint32_t sextet4 = base64DecodeCharacter(base64String[i++]); uint32_t triple = (sextet1 << 18) + (sextet2 << 12) + (sextet3 << 6) + (sextet4); if (j < outputLength) { outputBuffer[j++] = (triple >> 16) & 0xFF; } if (j < outputLength) { outputBuffer[j++] = (triple >> 8) & 0xFF; } if (j < outputLength) { outputBuffer[j++] = (triple) & 0xFF; } } outputBuffer[outputLength] = '\0'; return outputBuffer; } // Function to get Base64 decoding of character uint32_t base64DecodeCharacter(char c) { if (c >= 'A' && c <= 'Z') { return c - 'A'; } else if (c >= 'a' && c <= 'z') { return c - 'a' + 26; } else if (c >= '0' && c <= '9') { return c - '0' + 52; } else if (c == '+') { return 62; } else if (c == '/') { return 63; } else { return 0; } } // Function to encode byte array as Base64 string String base64Encode(byte* inputBuffer, int inputLength) { String encodedString = ""; for (unsigned int i = 0; i < inputLength;) { uint32_t triple = inputBuffer[i++] << 0x10; if (i < inputLength) { triple |= inputBuffer[i++] << 0x08; } if (i < inputLength) { triple |= inputBuffer[i++] << 0x00; } uint32_t sextet1 = (triple >> 18) & 0x3f; uint32_t sextet2 = (triple >> 12) & 0x3f; uint32_t sextet3 = (triple >> 6) & 0x3f; uint32_t sextet4 = (triple >> 0) & 0x3f; encodedString += base64EncodeCharacter(sextet1); encodedString += base64EncodeCharacter(sextet2); if (i < (inputLength + 2)) { encodedString += base64EncodeCharacter(sextet3); } else { encodedString += '='; } if (i < (inputLength + 1)) { encodedString += base64EncodeCharacter(sextet4); } else { encodedString += '='; } yield(); } return encodedString; } // Function to get Base64 encoding of character char base64EncodeCharacter(uint32_t value) { if (value < 26) { return 'A' + value; } else if (value < 52) { return 'a' + (value - 26); } else if (value < 62) { return '0' + (value - 52); } else if (value == 62) { return '+'; } else if (value == 63) { return '/'; } else { return '\0'; } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值