首页
相册
统计
留言
更多
网安工具
CTF工具
关于
Search
1
椭圆曲线加密算法原理(ECC)
5,324 阅读
2
SMBGhost(CVE-2020-0796)漏洞利用
4,302 阅读
3
关于gdb调试
4,065 阅读
4
Arduino使用CubeCell开发板进行LORA无线通信
3,852 阅读
5
Diffie-Hellman密钥协商算法
3,542 阅读
深度学习
技术随笔
应急响应
漏洞复现
流量分析
溯源
入侵检测
Linux
eBPF
服务配置
渗透测试
信息收集
横向攻击
密码学
web安全
CTF
登录
Search
标签搜索
单片机
密码学
Windows
BPF
Python
Linux
Mysql
APP开发
软考
Cobalt Strike
flutter
入侵检测
HSM's Blog
累计撰写
53
篇文章
累计收到
11
条评论
首页
栏目
深度学习
技术随笔
应急响应
漏洞复现
流量分析
溯源
入侵检测
Linux
eBPF
服务配置
渗透测试
信息收集
横向攻击
密码学
web安全
CTF
页面
相册
统计
留言
网安工具
CTF工具
关于
搜索到
4
篇与
的结果
2023-05-13
开发板Nanopc T4添加固态硬盘并将硬盘挂载到/home
Nanopc T41、磁盘分区1.1 查看linux下的磁盘信息检测新硬盘的设备名sudo fdisk -l1.2 磁盘分区格式化新分区sudo fdisk /dev/nvme0n1按 d 删除现有分区。按 n 添加新分区,按回车默认就行。按 w 保存操作并退出。2、初始化文件系统将创建的新分区‘/dev/nvme0n1p1’初始化为一个ext4文件系统。sudo mkfs.ext4 /dev/nvme0n1p13、将新分区挂载到/home目录下3.1 将旧文件转移到新分区中分区新建完成后打开终端,在/mnt目录下新建/home目录把新分区挂载到/mnt/home目录,分区名/dev/nvme0n1p1根据实际情况调整。sudo mount /dev/nvme0n1p1 /mnt/home将/home目录的文件同步到/mnt/home使用rsync命令进行同步,等待命令行返回。sudo rsync -aXS /home/ /mnt/home-a --archive :归档模式,表示递归传输并保持文件属性。等同于"-rtopgDl"–xattrs, -X :保留扩展属性–relative, -R:使用相对路径名3.2 将新分区挂载到/home中挂载/mnt/home到/home重命名原来的/home,做完这一步,有些依赖于/home目录的软件将异常,不要慌,因为/home目录系统找不到了。sudo mv /home /home_old新建/home目录sudo mkdir /home卸载/dev/nvme0n1p1分区设备(根据实际情况卸载)。sudo umount /dev/nvme0n1p1挂载/dev/nvme0n1p1到/home,此时异常的软件应该恢复正常了。sudo mount /dev/nvme0n1p1 /home检查是否挂载成功df -h4、修改fstab文件实现开机自动挂载查看blkid,根据自己的实际分区输入sudo blkid | grep /dev/nvme0n1p1复制上一步输出中的UUID值(""中的字符串)备用。补充:查看UUID号需要root用户进行,不然可能查不到结果修改/etc/fstab文件sudo vim /etc/fstab说明:noatime - 不更新文件系统上 inode 访问记录,可以提升性能(参见 atime 参数)defaults - 使用文件系统的默认挂载参数,例如 ext4 的默认参数为:rw, suid, dev, exec, auto, nouser, async. dump 工具通过它决定何时作备份. dump 会检查其内容,并用数字来决定是否对这个文件系统进行备份。 允许的数字是 0 和 1 。0 表示忽略, 1 则进行备份。大部分的用户是没有安装 dump 的 ,对他们而言 应设为 0。 fsck 读取 的数值来决定需要检查的文件系统的检查顺序。允许的数字是0, 1, 和2。 根目录应当获得最高的优先权 1, 其它所有需要被检查的设备设置为 2. 0 表示设备不会被 fsck 所检查。修改为如下所示:UUID=e73351a1-47db-4c4e-9e1a-f3af0d4da53d /home ext4 defaults,noatime 0 2重启系统后无异常,删除/home_old(慎重操作)。sudo rm -rf /home_old
2023年05月13日
114 阅读
0 评论
1 点赞
2022-01-27
使用Arduino对ESP8266开发
ESP8266 是一款由乐鑫 Espressif 公司制作的低成本的 Wi-Fi 芯片,具有完整的 TCP / IP 协议栈和微控制器功能。它专为移动设备、可穿戴电子产品和物联网应用设计,功耗很低且价格非常低廉。我这里使用的 NodeMcu 开发板即搭载了这款芯片。Arduino IDE 是由 Arduino 官方提供的支持 C 语言的集成开发环境,主要是针对 Arduino 系列的开发板进行编程。通过简单的配置,可以在原本的编程环境里添加上对 ESP8266 开发板的支持。对于熟悉 Arduino 函数库和开发流程的用户,基本上没有任何使用上的区别。1. 添加 ESP8266 支持1.1 首先从 Arduino 官网 下载最新版本的 Arduino IDE 软件并安装。安装完成以后,进入首选项(Preferences),找到附加开发板管理器地址(Additional Board Manager URLs),并在其后添加如下信息:http://arduino.esp8266.com/stable/package_esp8266com_index.json1.2 之后点击工具 - 开发板 - 开发板管理器,进入开发板管理器界面:1.3 找到 esp8266 并安装:1.4 安装依赖库,打开工具->管理库(Ctrl+Shift+I),安装ArduinoJson库1.5 安装完成后,重启 Arduino IDE 软件。在工具 - 开发板选项中即会看到 ESP8266 开发板的选项:ESP8266 开发板了解ESP8266WebServer库2. 玩ESP82662.1 接线图将一个继电器的信号线接到D0接口,另一个继电器的信号线接到D5口,两个继电器都是高电平触发如图所示2.2 程序代码#include "ESP8266WiFi.h" #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <ESP8266mDNS.h> #include "ArduinoJson.h" //SPI: 通用硬件SPI,主/从皆可 //HSPI: 通用硬件SPI,只能作为从机 #define A0 17 //ADC 只能作为ADC输入脚,没有输出功能 #define D0 16 #define D1 5 // SoftServo #define D2 4 // SoftServo #define D3 0 // SoftServo <> EX: Key #define D4 2 // SoftServo <> UART1: RX <> EX: Led #define D5 14 // SoftServo <> HSPI: SCLK #define D6 12 // SoftServo <> HSPI: MISO #define D7 13 // SoftServo <> HSPI: MOSI #define D8 15 // SoftServo <> HSPI: CS #define D9 3 // SoftServo <> UART0: RX #define D10 1 // SoftServo <> UART0: TX #define SD3 10 // SD_Card: SDD3 #define SD2 9 // SD_Card: SDD2 #define SD1 8 // SD_Card: SDD1 <> SPI: MOSI <> UART1: RX #define SD0 7 // SD_Card: SDD0 <> SPI: MISO #define CMD 11 // SD_Card: SDCMD <> SPI: CS #define CLK 6 // SD_Card: SDCLK <> SPI: SCLK #define RX D9 // SoftServo #define TX D10 // SoftServo #ifndef STASSID #define STASSID "TP-LINK_5D24_2" #define STAPSK "he18979925238" #endif const char* host = "esp8266-webupdate"; const char* ssid = STASSID; const char* password = STAPSK; ESP8266WebServer server(80); // 回调函数 // 设置处理404情况的函数'handleNotFound' void handleNotFound() { // 当浏览器请求的网络资源无法在服务器找到时, server.send(404, "text/plain", "404: Not found"); // NodeMCU将调用此函数。 } // ==== start ======= // ==== JSON序列化==== //声明一个json数据 //char myJson[] = "{\"status\":\"true\",\"myArray\":[13,14],\"myObject\":{\"myFloat\":3.1415926}}"; char myJson[] = "{\"status\":\"true\",\"optition\":\"1\"}"; StaticJsonDocument<200> doc; //声明一个JsonDocument对象 // DynamicJsonDocument doc(200); //声明一个JsonDocument对象 DeserializationError error = deserializeJson(doc, myJson); //反序列化JSON数据 JsonObject obj = doc.as<JsonObject>(); // ===== end ====== // 初始化接口配置信息 //int deviceList[9] = [1,1,1,1,1,1,1,1,1]; void setup() { delay(5000); Serial.begin(115200); Serial.println("device init ..."); // 初始化引脚,设置未默认 pinMode(D0, OUTPUT); pinMode(D2, OUTPUT); pinMode(D3, OUTPUT); pinMode(D4, OUTPUT); pinMode(D5, OUTPUT); pinMode(D6, OUTPUT); pinMode(D7, OUTPUT); pinMode(D8, OUTPUT); // 设置AP与WIFI共存 WiFi.mode(WIFI_AP_STA); WiFi.begin(ssid, password); // 开始连接wifi if (WiFi.waitForConnectResult() == WL_CONNECTED) { // Serial.println(""); Serial.println("WiFi connect success!!!!"); // Serial.println(""); // 配置无线AP WiFi.softAP("ESP8266", password); IPAddress myIP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.print(myIP); Serial.print("\n"); MDNS.begin(host); Serial.println("MDNS Server start success..."); // 路由管理 server.onNotFound(handleNotFound); server.on("/", HTTP_GET, []() { server.sendHeader("Connection", "close"); const char* serverIndex = "esp8266 control \n http://ip/start\n http://ip/stop"; server.send(200, "text/html", serverIndex); }); server.on("/start", HTTP_GET, []() { server.sendHeader("Connection", "close"); // 返回参数个数 int a = server.args(); // server.arg(Name) // server.arg(index) // print(a) // 这个name参数为定义 // String argDeviceInterfaceName = server.arg("name"); // 暂时未找到异常处理的方法 String output; int argDeviceInterfaceID = server.arg("id").toInt(); switch (argDeviceInterfaceID) { case 0: // your hand is on the sensor digitalWrite(D0, HIGH); break; case 1: // your hand is close to the sensor digitalWrite(D1, HIGH); break; case 2: // your hand is a few inches from the sensor digitalWrite(D2, HIGH); break; case 3: // your hand is nowhere near the sensor digitalWrite(D3, HIGH); break; case 4: // your hand is nowhere near the sensor digitalWrite(D4, HIGH); break; case 5: // your hand is nowhere near the sensor digitalWrite(D5, HIGH); break; case 6: // your hand is nowhere near the sensor digitalWrite(D6, HIGH); break; case 7: // your hand is nowhere near the sensor digitalWrite(D7, HIGH); break; case 8: // your hand is nowhere near the sensor digitalWrite(D8, HIGH); break; } obj["optition"] = argDeviceInterfaceID; serializeJsonPretty(doc, output); server.send(200, "text/html", output); }); server.on("/stop", HTTP_GET, []() { // 用来保存序列化的json字符串 String output; // server.sendHeader("Connection", "close"); int a = server.args(); // String argDeviceInterfaceName = server.arg("name"); int argDeviceInterfaceID = server.arg("id").toInt(); switch (argDeviceInterfaceID) { case 0: // your hand is on the sensor digitalWrite(D0, LOW); break; case 1: // your hand is close to the sensor digitalWrite(D1, LOW); break; case 2: // your hand is a few inches from the sensor digitalWrite(D2, LOW); break; case 3: // your hand is nowhere near the sensor digitalWrite(D3, LOW); break; case 4: // your hand is nowhere near the sensor digitalWrite(D4, LOW); break; case 5: // your hand is nowhere near the sensor digitalWrite(D5, LOW); break; case 6: // your hand is nowhere near the sensor digitalWrite(D6, LOW); break; case 7: // your hand is nowhere near the sensor digitalWrite(D7, LOW); break; case 8: // your hand is nowhere near the sensor digitalWrite(D8, LOW); break; } obj["optition"] = argDeviceInterfaceID; serializeJsonPretty(doc, output); server.send(200, "text/html", output); }); server.on("/register", HTTP_GET, []() { // server.sendHeader("Connection", "close"); String boardInterfaceName = server.arg("name"); // 用来保存序列化的json字符串 String output; // obj["optition"] = argDeviceInterfaceID; obj["mag"] = "register success"; serializeJsonPretty(doc, output); server.send(200, "text/html", output); }); // 开启web服务 server.begin(); Serial.println("web server start success ...."); // 开启 MDNS.addService("http", "tcp", 80); Serial.printf("device init success! \n please by browser open the url:http://%s.local\n", host); Serial.printf("\n"); } else { Serial.println("WiFi connect fail,please check SSID and password\n"); } } void loop() { //监听客户请求并处理 server.handleClient(); MDNS.update(); }3. 使用3.1 串口使用可以使用Comtone进行串口调试3.2 功能使用程序中已经设置了打开和关闭继电器的接口,可以使用API接口:比如开启D0接口的继电器http://esp-local-ip/start?id=0比如关闭D0接口的继电器http://esp-local-ip/start?id=0
2022年01月27日
3,310 阅读
0 评论
1 点赞
2021-12-06
Arduino使用CubeCell开发板进行LORA无线通信
什么是LoRaLoRa是semtech公司创建的低功耗局域网无线标准,低功耗一般很难覆盖远距离,远距离一般功耗高,要想马儿不吃草还要跑得远,好像难以办到。LoRa的名字就是远距离无线电(Long Range Radio),它最大特点就是在同样的功耗条件下比其他无线方式传播的距离更远,实现了低功耗和远距离的统一,它在同样的功耗下比传统的无线射频通信距离扩大3-5倍。LoRa的特性传输距离:城镇可达2-5 Km , 郊区可达15 Km 。工作频率:ISM 频段 包括433、868、915 MH等。标准:IEEE 802.15.4g。调制方式:基于扩频技术,线性调制扩频(CSS)的一个变种,具有前向纠错(FEC)能力,semtech公司私有专利技术。容量:一个LoRa网关可以连接上千上万个LoRa节点。电池寿命:长达10年。安全:AES128加密。传输速率:几百到几十Kbps,速率越低传输距离越长,这很像一个人挑东西,挑的多走不太远,少了可以走远。LoRa和LoRaWanLoRa和LoRaWan很容易混淆。下图可以看出,LoRa是LoRaWan的一个子集,LoRa仅仅包括物理层定义,LoRaWan还包括了链路层。这张图片是LoRaWan的网络架构图,左边是各种应用传感器,包括智能水表,智能垃圾桶,物流跟踪,自动贩卖机等,它右边是LoRaWan网关,网关转换协议,把LoRa传感器的数据转换为TCP/IP的格式发送到Internet上。LoRa网关用于远距离星型架构,是多信道、多调制收发、可多信道同时解调。由于LoRa的特性可以同一信道上同时多信号解调。网关使用不同于终端节点的RF器件,具有更高的容量,作为一个透明网桥在终端设备和中心网络服务器间中继消息。网关通过标准IP连接连接到网络服务器,终端设备使用单播的无线通信报文到一个或多个网关。其实LoRaWan并不是一个完整的通信协议,因为它只定义了物理层和链路层,网络层和传输层没有,功能也并不完善,没有漫游,没有组网管理等通信协议的主要功能。LORA 的Class ABC三个模式Class A 上下行的时序图,目前接收窗口RX1一般是在上行后1秒开始,接收窗口RX2是在上行后2秒开始。(终端有数据了,就上报,顺便收一下服务器下发的指令。终端没数据的时候,服务器下发不了指令。适合用在智能井盖、智能垃圾桶、传感器等场景,你可以几天才发一个数据上去,省电的很。)Class B 的时隙则复杂一些,它有一个同步时隙beacon,还有一个固定周期的接收窗口ping时隙。如这个示例中,beacon周期为128秒,ping周期为32秒。(看起来复杂,实际上就跟NB-IoT的eDRX模式差不多,隔几十秒收一个数据。其他时候都在休眠。功耗低、服务器下发数据延时也不大。适合定位器、开关等场景。既不用接电,也能够“还算及时”的控制设备。)Class C 和 A 基本是相同的,只是在 Class A 休眠的期间,它都打开了接收窗口RX2。(几乎随时都可以接收数据。只干活不睡觉,功耗自然就高了。考虑到10mA级别的接收电流,不是长供电的设备最好别用这个模式。)LoRa关键参数(扩频因子,编码率,带宽)的设定及解释1. 扩频因子(SF)LoRa采用多个信息码片来代表有效负载信息的每个位,扩频信息的发送速度称为符号速率(Rs),而码片速率与标称的Rs比值即为扩频因子(SF,SpreadingFactor),表示了每个信息位发送的符号数量。LoRa扩频因子取值范围: 注意:因为不同的SF之间为正交关系,因此必须提前获知链路发送端和接收端的SF。另外,还必须获知接受机输入端的信噪比。。在负信噪比条件下信号也能正常接收,这改善了LoRa接受机的林敏度,链路预算及覆盖范围。理解扩频因子的概念:通俗的说 扩频时你的数据每一位都和扩频因子相乘,例如有一个1 bit需要传送,当扩频因子为1时,传输的时候数据1就用一个1来表示,扩频因子为6时(有6位)111111,这111111就来表示1,这样乘出来每一位都由一个6位的数据来表示,也就是说需要传输总的数据量增大了6倍。这样扩频后传输可以降低误码率也就是信噪比,但是在同样数据量条件下却减少了可以传输的实际数据,所以,扩频因子越大,传输的数据数率(比特率)就越小。Lora扩频因子的使用:当扩频因子SF为6时,LoRa的数据传输速率最快,因此这一扩频因子仅在特定情况下使用。使用时需要配置LoRa芯片SX127x:在RegModemConfig2,将SpreadingFactor设为6将报头设置为隐式模式在寄存器地址(0x31)的2至0位写入0b101在寄存器地址(0x37)写入0x0C2. 编码率(CR)编码率,是数据流中有用部分的比例。编码率(或信息率)是数据流中有用部分(非冗余)的比例。也就是说,如果编码率是k/n,则对每k位有用信息,编码器总共产生n位的数据,其中n-k是多余的。LoRa采用循环纠错编码进行前向错误检测与纠错。。使用该方式会产生传输开销。每次传输产生的数据开销如下: 在存在干扰的情况下,前向纠错能有效提高链路的可靠性。由此,编码率(抗干扰性能)可以随着信道条件的变化而变化,可以选择在报头加入编码率以便接收端能够解析。3. 信号带宽(BW)增加BW,可以提高有效数据速率以缩短传输时间,但是 以牺牲部分接受灵敏度为代价。对于LoRa芯片SX127x,LoRa带宽为双边带宽(全信道带宽),而FSK调制方式的BW是指单边带宽。LoRa带宽选项:注意:较低频段(169MHz)不支持250K和500KHz的BW4. LoRa信号带宽BW、符号速率Rs和数据速率DR的关系LoRa符号速率Rs可以通过以下公式计算:$$ Rs\ =\ \frac{BW}{2^{SF}} $$每Hz每秒发送一个码片。LoRa数据速率DR可以通过以下公式计算:$$ DR\ =\ \ SF\frac{BW}{2^{SF}}CR $$Lora的使用1. CubeCell开发版CubeCell AB01开发版如下所示:官方文档:点击查看官方文档2. 配置开发cubecell的arduino IDE环境附加开发版管理器网址:https://resource.heltec.cn/download/package_CubeCell_index.json依次打开“首选项”->“附加开发版管理器网址”,添加上面的url地址如图:按如下图所示打开开发版管理器在搜索栏中搜索“cubecell”,选择相应的版本安装即可。远程通信的实现1. 环境本次使用LORA开发版型号 CubeCell AB01本次使用的频段833MHZ2. 发送端程序#include "LoRaWan_APP.h" #include "Arduino.h" #ifndef LoraWan_RGB #define LoraWan_RGB 0 #endif #define RF_FREQUENCY 868000000 // Hz #define TX_OUTPUT_POWER 22 // dBm #define LORA_BANDWIDTH 2 // [0: 125 kHz, // 1: 250 kHz, // 2: 500 kHz, // 3: Reserved] #define LORA_SPREADING_FACTOR 7 // [SF7..SF12] #define LORA_CODINGRATE 1 // [1: 4/5, // 2: 4/6, // 3: 4/7, // 4: 4/8] #define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx #define LORA_SYMBOL_TIMEOUT 0 // Symbols #define LORA_FIX_LENGTH_PAYLOAD_ON false #define LORA_IQ_INVERSION_ON false #define RX_TIMEOUT_VALUE 1000 #define BUFFER_SIZE 512 // Define the payload size here char txpacket[BUFFER_SIZE]; char rxpacket[BUFFER_SIZE]; static RadioEvents_t RadioEvents; double txNumber; int16_t rssi,rxSize; #define TIMEOUT 10//time in ms uint8_t serialBuffer[BUFFER_SIZE]; int size; void setup() { boardInitMcu( ); Serial.begin(115200); txNumber=0; rssi=0; RadioEvents.RxDone = OnRxDone; Radio.Init( &RadioEvents ); Radio.SetChannel( RF_FREQUENCY ); Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH, LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, 0, true, 0, 0, LORA_IQ_INVERSION_ON, true ); Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, LORA_CODINGRATE, LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON, true, 0, 0, LORA_IQ_INVERSION_ON, 3000 ); turnOnRGB(1,0); //change rgb color Serial.println("into RX mode"); } void loop() { // 发送数据 size = Serial.read(serialBuffer,TIMEOUT); if(size && size <= BUFFER_SIZE/2) { Serial.printf("send data size %d : ",size); Serial.write(serialBuffer,size); Radio.Send( serialBuffer,size ); //send the package out turnOnRGB(COLOR_SEND,0); Serial.printf("\nsend success\n"); } }3. 接收端程序/* Heltec Automation Receive communication test example * * Function: * 1. Receive the same frequency band lora signal program * * * this project also realess in GitHub: * https://github.com/HelTecAutomation/ASR650x-Arduino * */ #include "LoRaWan_APP.h" #include "Arduino.h" /* * set LoraWan_RGB to 1,the RGB active in loraWan * RGB red means sending; * RGB green means received done; */ #ifndef LoraWan_RGB #define LoraWan_RGB 0 #endif #define RF_FREQUENCY 868000000 // Hz #define TX_OUTPUT_POWER 22 // dBm #define LORA_BANDWIDTH 2 // [0: 125 kHz, // 1: 250 kHz, // 2: 500 kHz, // 3: Reserved] #define LORA_SPREADING_FACTOR 7 // [SF7..SF12] #define LORA_CODINGRATE 1 // [1: 4/5, // 2: 4/6, // 3: 4/7, // 4: 4/8] #define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx #define LORA_SYMBOL_TIMEOUT 0 // Symbols #define LORA_FIX_LENGTH_PAYLOAD_ON false #define LORA_IQ_INVERSION_ON false #define RX_TIMEOUT_VALUE 1000 #define BUFFER_SIZE 30 // Define the payload size here char txpacket[BUFFER_SIZE]; char rxpacket[BUFFER_SIZE]; static RadioEvents_t RadioEvents; int16_t txNumber; int16_t rssi,rxSize; #define TIMEOUT 10//time in ms uint8_t serialBuffer[256]; int size; void setup() { boardInitMcu( ); Serial.begin(115200); txNumber=0; rssi=0; RadioEvents.RxDone = OnRxDone; Radio.Init( &RadioEvents ); Radio.SetChannel( RF_FREQUENCY ); Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH, LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, 0, true, 0, 0, LORA_IQ_INVERSION_ON, true ); Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, LORA_CODINGRATE, LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON, true, 0, 0, LORA_IQ_INVERSION_ON, 3000 ); turnOnRGB(COLOR_SEND,0); //change rgb color Serial.println("into RX mode"); } void loop() { Radio.Rx( 0 ); // delay(500); Radio.IrqProcess( ); // 发送数据 size = Serial.read(serialBuffer,TIMEOUT); if(size) { Serial.printf("send data size %d : ",size); Serial.write(serialBuffer,size); Radio.Send( serialBuffer,size ); //send the package out turnOnRGB(COLOR_SEND,0); Serial.printf("\nsend success\n"); } } void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr ) { rssi=rssi; rxSize=size; memcpy(rxpacket, payload, size ); rxpacket[size]='\0'; turnOnRGB(COLOR_RECEIVED,0); Radio.Sleep( ); Serial.printf("\r\nreceived packet \"%s\" with rssi %d , length %d\r\n",rxpacket,rssi,rxSize); }
2021年12月06日
3,852 阅读
0 评论
1 点赞
2020-07-06
在Linux下用Wake On LAN实现远程开机
在Linux下用Wake On LAN实现远程开机请先确认满足以下环境要求:操作机器与目标机器在同一局域网内,目标机器电源和网线已插好,目标机器网卡和主板均支持远程唤醒。华为和荣耀的笔记本不支持BIOS没Wake Up On LAN这个选项,垃圾笔记本-_-具体操作步骤:1. 在本机安装Wake On LAN。可从官方网站下载。如果使用Fedora,则可以用yum命令安装:yum install wol #或者 dnf install wol如果是Manjaro/Archsudo pacman -S wol2. 登录目标机器,运行ethtool命令查看网卡是否支持Wake On Lanethtool eth0看这两行Supports Wake-on: pumbgWake-on: d若Wake-on为d,表示禁用Wake On LAN,需要启用它。ethtool -s eth0 wol g # 这条命令需要root,不然就算支持也不显示Wake-on: d如果已经是g就不用管了,说明目标机器的网卡已经支持Wake On LAN.3. 查看目标机器网卡的MAC地址ifconfig比如获得的MAC地址为 00:01:0A:02:0B:034. 关闭目标机器,在主机运行wol命令Manjaro可以使用wol命令唤醒wol 00:01:0A:02:0B:03这个命令在Arch/Manjaro上有效,不知道其他Linux发行办有没有,反正Ubuntu(apt)上的没有Ubuntu可以使用wakeonlan命令Ubuntu上没有wol这个安装包,不过可以安装wakeonlansudo apt install wakeonlan远程唤醒wakeonlan 00:01:0A:02:0B:03一般来说,目标机器这时就会开启了。如果没用,请进入下一步检查主板是否支持Wake On LAN5. 检查主板是否支持Wake On LAN开机时进入BIOS,查看CMOS中的“Power Management Setup”,通常里面会有“Wake On LAN”,将其设置为“Enable”。若没有Wake On LAN,可以再看看有没有"ake On PCI Card"。这里需要留意PCI的选项可能有两个,确保每次只将其中之一设置为Enable,不然可能会造成机器循环重启。华为笔记本按Fn+F2进入BIOS,目测不支持...远程开机还是很给力的。我给隔壁主机设置了开机自动打开dhcp和ssh服务,wol唤醒它之后用ssh登录,就可以操作或远程关机,实现了对其控制的目的。
2020年07月06日
1,354 阅读
0 评论
0 点赞