使用IoT DevKit和Azure IoT中心将云发送到设备消息-设备代码

时间:2019-10-22 08:40:22

标签: azure-iot-hub azure-iot-sdk iot-devkit mxchip

我需要从IoT中心向DevKit设备发送一条消息。我想基于https://docs.microsoft.com/en-au/azure/iot-hub/iot-hub-devguide-c2d-guidance发送直接方法,因为我需要管理一组继电器。

我有一个IoT DevKit,并且已经成功配置了它,并且能够将设备发送到IoT中心消息,但是我正在寻找一个示例来以另一种方式执行此操作。我目前只能找到设置设备孪生属性的示例,而不能发送直接方法。在服务器端,我相信我会使用Microsoft.Azure.Devices.ServiceClient向设备发送一条消息(很高兴被纠正是不正确的)。

在我认为(???)的设备上,我需要使用SetDeviceMethodCallback,但我不知道如何初始化它并接收消息。理想情况下,该示例还应包括如何发送确认消息已被接收并已采取措施的确认。

即使是让我知道自己在正确的道路上,任何帮助也将不胜感激。预先感谢。

1 个答案:

答案 0 :(得分:0)

这是我之前在设备端使用IoT DevKit(= Mxchip)的一些示例:

static int  DeviceMethodCallback(const char *methodName, const unsigned char *payload, int size, unsigned char **response, int *response_size)
{
  LogInfo("Try to invoke method %s", methodName);
  const char *responseMessage = "\"Successfully invoke device method\"";
  int result = 200;

  if (strcmp(methodName, "start") == 0)
  {
    DoSomething();
  }
  else if (strcmp(methodName, "stop") == 0)
  {
    DoSomethingElse();
  }
  else
  {
    LogInfo("No method %s found", methodName);
    responseMessage = "\"No method found\"";
    result = 404;
  }

  *response_size = strlen(responseMessage) + 1;
  *response = (unsigned char *)strdup(responseMessage);

  return result;
}

DevKitMQTTClient_SetDeviceMethodCallback(DeviceMethodCallback);

在服务端(您在其中进行方法调用),这里是一些C#示例

ServiceClient _iothubServiceClient = ServiceClient.CreateFromConnectionString(config["iothubowner_cs"]);

var result = await _iothubServiceClient.InvokeDeviceMethodAsync(deviceid, "start");
var status = result.Status;