1、C语言项目代码运行步骤

1)保证虚拟机和主机网络互通

在windows下查看ip:
win + R : 运行
输入cmd,打开windows命令窗口
输入ipconfig

在这里插入图片描述

  • ping命令:测试网络连通性
    导致ping不通的原因:
    1)双方不在同网段
    2)防火墙拦截

在这里插入图片描述
ctrl + c //结束进程 发送杀死进程的信号

2)让ubuntu支持mqtt
将mqtt的库文件导入到根目录下的库中
paho.mqtt.c-1.3.0.tar.gz //压缩好的mqtt库文件
先将该压缩包移动到虚拟机中 (拖拽/终端复制/共享文件夹)
把include中所有文件拷贝到/usr/include目录中:

sudo  cp  include/*  /usr/include

把lib中所有内容拷贝到/usr/lib目录中即可在代码中直接引用。拷贝命令如下:

 sudo  cp  -d  lib/*so*  /usr/lib  

3)将灯控实验的程序源码移动到虚拟机中
先将smarthome.conf文件中的ip修改成个人主机ip
在这里插入图片描述
输入make指令,对工程进行编译。
生成名为lamp的可执行程序
./lamp执行即可在虚拟仿真中看到现象。

2、C语言应用层代码具体实现

灯控实验 - 远程控制功能实现

  • 编码思路:

     1)连接MQTT
     mqtt_init();   //初始化mqtt
     2)设置好发布消息的Topic
     3)按json协议格式发送控制指令
     int mqtt_publish(const char *topic, char *msg)  
     功能:向mqtt发布一条消息
     参数:const char *topic 话题, char *msg 消息
    
  • C语言输入输出

printf 格式化输出函数
头文件:#include<stdio.h>
函数原型:int printf(const char *format, ...); 
功能:向终端输出指定格式的内容
参数:格式,要输出的变量或内容
      %d  -- 十进制整数
	  %f  -- 小数
	  %c  -- 字符
	  %s  -- 字符串
	  %p  -- 地址
	  %#x -- 十六进制数
	  %#o -- 八进制数
      ... 

scanf  格式化输入函数
int scanf(const char *format, ...);
功能:按照指定格式从终端输入数据
参数:格式,输入的目标地址
  • 变量数据类型:
	char    字符型           1字节    
	short   短整型           2字节  
	int     整型             4字节   
	long    长整型           4字节(32位os)
	float   单精度浮点型     4字节
	double  双精度浮点型     8字节 

以下代码可以控制灯的亮灭

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "mqtt.h"
#include "parse_config.h"
#include <unistd.h>

int main(int argc, char *argv[])
{
	//char ctrlbuf[10] = {0};
	int ctrl = 0;
	printf("请输入控制指令:(1.开灯 2.关灯 3.退出)\n");
	scanf("%d",&ctrl);
	if(mqtt_init() != 0)
	{
		printf("连接失败!\n");
		return 0;
	}
	if(ctrl == 1){
		mqtt_publish("ScratchToSoftWare","{\"lamp\":true,\"id\":0}");
		//推送开灯指令
	}else if(ctrl == 2)
	{
		mqtt_publish("ScratchToSoftWare","{\"lamp\":false,\"id\":0}");
		//推送关灯指令
	}else if(ctrl == 3)
	{
		printf("控制系统退出!\n");
		return 0;
	}else
	{
		printf("指令有误!\n");
	}
	return 0;
}

在这里插入图片描述
此时灯亮
在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐