导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
2018/9/12 0:41:33
标题:
[记录]关于INDY TIdTCPClient 与 RTC TRtcTcpClient 在发送16进制的比较
浏览:4352
加入我的收藏
楼主:
最近跟儿子一起制作WiFi智能小车。小车端支持WiFi连接 TCP Server 接收16进制指令控制动作。现在编写安卓客户端,其中关于 TCP Client 的测试记录如下。 编译平台:FMX 10.1.2 INDY TIdTCPClient:自带版本 RTC TRtcTcpClient:v6.42 (2014.Q3) HexToString函数采用 "earthsbest (全能中间件)"大神提供的代码,连接在这里:http://bbs.2ccc.com/topic.asp?topicid=541964 以前在D7时代使用过Indy的TCP Client发送HEX,是非常简单的: IdTCPClient1.Write(HexToString('FF000000FF')) 在新版的FMX中,这样使用接收到的信息是错误的。通过搜索资料发现,现在新版的Indy,而且还要跨平台,发送的时候可以指定不同的编码,所以应该是: IdTCPClient1.IOHandler.Write(HexToString('FF000000FF'), IndyTextEncoding(TEncoding.ANSI)); 另外没有考究与下面这个是不是一样的功能: IdTCPClient1.Socket.Write() 但WriteLn在我这里是不能使用的,因为会自行加入换行符。 另外自己一直在使用RTC。RTC中也是有Tcp Client,所以也测试一番: RtcTcpClient1.Write(HexToString('FF000000FF')); 接收是错误的,经过一轮测试发现16进制大于80(即十进制的128)就会变成3F。 也是编码问题,通过论坛搜索,也感谢全能大神提供资料,改用这样发送: RtcTcpClient1.WriteEx(RtcByteArray(TEncoding.ANSI.GetBytes(HexToString('FF000000FF')))); 接收正确。 作为 TCP Client Indy与RTC都支持跨平台,对于我个人来说会喜欢RTC的多一点。其中有两点: 1、RTC轻量、稳定 2、Indy的事件机制不好,小车的SERVER端如果掉线或者重启等(还有就是小车跑到信号不好的地方),经常会出现SOCKET出错提示,又没有连接异常事件去屏蔽。所以笨的方法是在每次发送前先判断是否连接正常,如果异常就断开连接,免得产生出错。RTC的事件会非常好的控制。
----------------------------------------------
-
作者:
2018/9/12 8:30:13
1楼:
lz 用的啥mcu模块啊。。 为何不用网页 bin?
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/ >http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
2018/9/12 8:32:35
1楼:
Indy短连接就没有问题了!
----------------------------------------------
-
作者:
2018/9/12 8:41:13
2楼:
骂人的词已经删除 都是 Bytes 要个屁的 string
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/9/12 11:32:20
3楼:
@wang_80919 (Flying Wang) 猫哥,别太燥啊,哈哈。其实昨晚发完贴我就觉得有问题,但是太晚了,真的太困了,所以打算今天才修正的。被你发现了。。。 RTC TcpClient 发送16进制方法: function HexToBytes(const Value: string): TBytes; var Length: Integer; InBytes: TBytes; begin InBytes := TEncoding.ANSI.GetBytes(Value); Length := System.Length(InBytes) shr 1; SetLength(Result, Length); System.Classes.HexToBin(InBytes, 0, Result, 0, Length); end; RtcTcpClient1.WriteEx(RtcByteArray(HexToBytes(Value)));
----------------------------------------------
-
作者:
2018/9/12 11:54:29
4楼:
做了两台。 第一台: 1、TPLink 703N 刷OpenWrt + Ser2net 2、整合L298N + 多路PWM舵机接口的一体单片机板 功能:WiFi接入,TTL输出串口控制信号,以控制电机、舵机、云台等等。并且可以接入多种传感器模块。由于采用路由器,所有支持USB摄像头视频输出。 第二台: 1、51单片机最小系统 2、物联网ESP8266EX芯片 功能:WiFi接入,TTL输出串口控制信号。不能接入摄像头 @keymark (keymark) 为何不用网页?由于控制端要兼容买的那块单片机,所以折中选择。 最后提一下ESP8266EX真的是太强大大,其实ESP8266EX直接有IO接入L298N驱动模块的,但是考虑到兼容两个板的问题,也就算了,采用串口输出好了。 之前考虑过用什么NRF24L01、Zigbee CC2530这些芯片作为无线控制,但是接收端和控制端都要配套,也要写下位机,麻烦,相对价格也贵。 做完小车下一步就是用ESP8266EX做一个智能插座、智能电表。。。呵呵
----------------------------------------------
-
作者:
2018/9/12 11:57:20
5楼:
一号车
此帖子包含附件: 大小: 377.6K
----------------------------------------------
-
作者:
2018/9/12 11:57:40
6楼:
一号内部
此帖子包含附件: 大小: 252.7K
----------------------------------------------
-
作者:
2018/9/12 12:05:01
7楼:
第二台
此帖子包含附件: 大小: 350.9K
----------------------------------------------
-
作者:
2018/9/12 12:05:22
8楼:
两兄弟
此帖子包含附件: 大小: 256.1K
----------------------------------------------
-
作者:
2018/9/12 12:05:46
9楼:
ESP8266EX,自己焊接的简易开发板。哈哈
此帖子包含附件: 大小: 248.7K
----------------------------------------------
-
作者:
2018/9/12 12:31:27
10楼:
很多朋友都说我买台遥控车几十块不就行了,何必大费周章搞那么多事。 其实我希望在做的过程中小孩对这些感兴趣,然后进一步学习单片机的控制。 所以我配置了最简单的51单片机最小系统,简单入门,而且通过IO控制LED灯是最直观。 上面这堆东西其实也不会浪费,等小孩慢慢长大,肯定会有用的。 我嘛,也将近40岁了,小时候没有条件,现在倒可以老顽童一下,哈哈。
----------------------------------------------
-
作者:
2018/9/12 14:16:03
11楼:
这玩意多少钱?
----------------------------------------------
学习拉!
作者:
2018/9/12 14:20:08
12楼:
这东西好玩,哪有卖,发个地址过来
----------------------------------------------
就怕想不到,没有做不到的
作者:
2018/9/12 14:26:32
13楼:
楼主,建议你开个网店。 买小车,送源码。 上位机或者说控制端,一律用 DELPHI 写。
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/9/12 15:42:05
14楼:
@caoweizhong123 (青秋) @lsh341999 (虫子) 虽然是做来玩得,但是也是一件很辛苦的事情。 上面所有东西都在淘宝上散件购买的,如果您有点电子的知识不难找。 如果您没有电子知识,我觉得您应该买套件,而不是散件。但话又说回来了,都买了套件,就好像拼装积木一样了,还有意思吗? 我两台车都是散件购买,大约花了2000元不到吧。 但是现在如果叫我在做的话,成本就非常低了,比如投资的工具都几百块了。 简单说下: 1.先去买一台全淘宝最便宜的玩具车(平底,空间大,最好长度30厘米以上)。这个只是为了要它的外壳,如果不要外壳的就不需要购买了。 2.画图。用尺子量好原底盘尺寸,绘制图纸,然后加上电机位置开孔尺寸等等 3.购买一块足够大的1060纯铝板2mm厚度,打印图纸,贴在上面,然后用线锯,锯出来。用台钻打孔。 4.打磨,把所有边边角角磨圆滑,再用细砂纸打磨后用手喷漆喷 5.安装电机,轮子,单片机,通信模块,电池,led灯,激光发射器,喇叭等 这里提醒一下单片机或通信模块的IO口输出电流能力有限,直接点亮个LED还可以,但亮度还是好低,需要采用NPN或PNP三极管把IO口作为控制相应负载的电源开关。 6.下位机编程,通信模块编程,上位机编程。
----------------------------------------------
-
作者:
2018/9/12 15:46:18
15楼:
工具
此帖子包含附件: 大小: 462.9K
----------------------------------------------
-
作者:
2018/9/12 15:47:50
16楼:
底板
此帖子包含附件: 大小: 397.7K
----------------------------------------------
-
作者:
2018/9/12 15:48:40
17楼:
喷漆
此帖子包含附件: 大小: 342.3K
----------------------------------------------
-
作者:
2018/9/12 15:57:42
18楼:
补充一下,其实电子零件都是很便宜,可能运费比零件还贵呢,如: 51单片机最小系统 6元左右 EPS8266EX 10元左右 三洋18650 2300毫安拆机电池 7元左右 TT电机+轮胎 6元左右 如果大家想玩,建议底盘,电机和轮胎,直接买亚克力板底盘套装,好像才30元以内。剩下的单片机,驱动模块,通信模块就买散件。 别像我一样,什么都自己做,虽然金属底盘耐玩,但是需要的工具和费用又多,而且累死。
----------------------------------------------
-
作者:
xhl (xhl)
★☆☆☆☆
-
盒子活跃会员
2018/9/13 22:45:46
19楼:
nickemma (N.E) 有 FMX INDY TIdTCPClient 数据接收 列子吗?
----------------------------------------------
-
作者:
2018/9/17 11:02:38
21楼:
网络传输最好用TBytes或TStream(其实也是TBytes),原汁原味地传送数据,不要搞什么编码、解码。速度还是最快的。
----------------------------------------------
中间件QQ群: 92449782 博客: http://www.cnblogs.com/hnxxcxg/
作者:
2018/9/17 12:02:59
22楼:
收藏!等儿子们再大一点也想引导他们玩这个学学编程。
----------------------------------------------
-
作者:
2018/9/17 12:39:56
23楼:
@xhl (xhl) 网上一搜一大堆啊。另外我更新的WiFiCai上位机程序,就是利用Indy TcpClient来接收、解码MJPEG流。 @hujiacheng ( 旺财) 其实我也想过用树莓派做车,但是成本太贵。 树莓派做车适合年龄大的小孩,或者智能开发公司,因为里面好多py的开源库,非常方便。比如可以做人脸识别,物体识别等等。就说无人车,智能物流机器人吧,树莓派来可以用来做原型测试。如果用单片机,根本做不来。 @hnxxcxg (咏南中间件) 您说的我都知道,如果上位机,下位机全部自己开发还可以这样做。但是前面也说了,我有两台车,一台是全部自己开发,另外一台是购买的整合单片机(含单片机,驱动模块,PWM舵机等等),所以我要兼容它的指令。
----------------------------------------------
-
作者:
2018/9/18 11:10:51
24楼:
请问我没有单片机方面的知识,只有编程方面的知识,也想给儿子捣鼓这个。楼主有什么建议啊?
----------------------------------------------
-
作者:
2018/9/18 12:12:07
25楼:
@unique20102003 (小马) 1、一套小车底盘(两块有机玻璃胶片、4个电机、4个轮胎) 大概30元左右 https://item.taobao.com/item.htm?spm=a230r.1.14.20.43314643aRcRmE&id=20088336267&ns=1&abbucket=11#detail 电子零件可以在这里购买(我的也在这里购买的):https://dianzi.taobao.com 2、51单片机最小系统(可以不需要,直接NODEMCU可以通过IO接L298N) L298N电机驱动模块 DC-DC电源转换模块(12V转3.3v) 杜邦连接线等 数字万用表、电络铁、焊锡、螺丝刀等工具 大概50元 3、直接买12v锂电池 4400毫安 + 充电器 大概100元 用12v小车会狠一点,我的两节18650x2只有7.2v,做四区有点吃力 4、NodeMCU,自带了ESP8266EX芯片,已引出全部引脚 5、USB转TTL 串口模块(用来调试单片机或NodeMcu) 好了,剩下了就是组装,没有电子知识的,需要特别注意是“接电”,先用万用表量好电压、区分正负极。 最后就是写程序了,NODEMCU写TCP SERVER非常简单,网上一大堆。控制端可以用我的APP。 以上是最小系统的最快速入门。等熟悉后,可以上OPENWRT路由接USB摄像头、超声波测距、红外探测等等模块。
----------------------------------------------
-
作者:
2018/9/18 12:59:28
26楼:
@nickemma 谢谢。我是在google+ 上看到的。您的这个方案还被老外赞扬了呢。 These is a cool project by one of my fellow Chinese Delphi programmers called nickemma (see original links at the end of the post) I came across today that I couldn't resist to share with the world: Picture 1 === The electronic car that receives control commands through WIFI, sent from an Android app developed in Delphi. Picture 2 === The FireMonkey app that sends hex. control commands to the toy car.BTW, it uses an UI framework called OrangeUI that's available in China only. Picture 3 === The settings window of the Android app where you specify the IP of the toy car's WIFI modue, the hex. commands for turning left/right, forward and back, and so on. Picture 4/5 === He made two toy cars each of which are differently constructed, but seems to be controlled by the same Delphi-powered Android app. I don't know much about the electronic thing, but this project obviously shows a cool part of Delphi :)
----------------------------------------------
-
作者:
2018/9/23 12:09:43
27楼:
标记备查
----------------------------------------------
-
作者:
ww66 (wzs)
★☆☆☆☆
-
普通会员
2018/9/23 21:38:57
28楼:
标记备查
----------------------------------------------
http://www.inteLw.cn:8077
作者:
vga (vga)
★☆☆☆☆
-
盒子活跃会员
2018/9/24 8:20:00
29楼:
赞呀!!!!
----------------------------------------------
-
作者:
2020/2/28 8:39:44
30楼:
楼主威武!!!
----------------------------------------------
-
作者:
2020/3/1 18:50:16
31楼:
现在国内大的物联网公司出品的物联网控制模组,大多是用 8266 做的。包括小米。 至于 TCP 连接,Indy 足够用,也很好用。 用 Indy,因为它是阻塞模式,如果网络不好发不动,就可能冻结程序界面。因此可以把发送和接收,放到线程里面去。对于现在的 Delphi 无需专门写一个 TThread 的继承代码,直接把收发代码放进 TTask.Run() 里面就可以了。 如果网络不好,发送失败,Indy 会出异常。因此这里需要做 try..except.. 捕获异常,然后断开重连。 我用 Indy 做的 APP 遥控无人机,可以控制到100米外。当然那是无人机上的 WiFi 模块比较好,可以距离远还能连上。
----------------------------------------------
-
作者:
2020/5/8 17:40:51
32楼:
这个厉害了,很有意思
----------------------------------------------
-
作者:
2020/5/9 23:54:00
33楼:
MARK
----------------------------------------------
==========
作者:
2020/5/10 9:29:02
34楼:
LZ是不是对TIdTcpClient有误解? TIdTcpClient.IOHandler.Write(TIdBytes) (具体方法名可能有出入) 现在又是hextostring,又是encode啥的,接收以后还要反向转码一遍,多蛮烦 :) btw,小车真不错,动手能力大赞。 智能小车TB有各种散件,包括车架,马达,轮子,马达驱动,各种传感器,我前年用arduino搭了一套给小孩玩,可以自动避障,小孩乐坏了 😄
----------------------------------------------
-